3 回答

TA貢獻1851條經驗 獲得超3個贊
你需要找出哪里Description
存在using?pd.Series.eq
,然后使用pd.Index.to_series
,這樣我們才能使用pd.Series.shift
。
cols = df.columns.to_series()
m = cols.eq('Description') #would mark True where value is `Description`
out = cols.shift().str.strip().str.replace('\s+','_') + '_' + cols
out[~m] = cols
out.to_list()
['Sl.No', 'Job', 'Job_Description', 'Vendor', 'Vendor_Description', 'WO No',
?'Accounting Center ', 'Accounting_Center_Description', 'Nature Of Work',
?'WO Type', 'WO Date', 'WO From Date', 'WO To Date', 'Bill No', 'Running Bill No',
?'Bill Date', 'Bill Status', 'Voucher No', 'Voucher Date', 'Bank \nVoucher No',
?'Bank Voucher\n Date', ' Paid Amount', 'Currency', 'WO Amt', 'Bill Amt',
?'Service Tax Amt', 'VAT Amt', 'Total Tax \nAmt', ' Advance Amt', 'Gross Amt',
?'Deduction Amt', 'Net Amt']

TA貢獻1821條經驗 獲得超6個贊
讓cols成為您原始列表的名稱。那么代碼可能是:
D = "Description"
previous_current = zip([None] + cols[:-1], cols)
df.columns = [curr if curr != D else prev + "_" + D for prev, curr in previous_current]
結果:
>>> df.columns
Index(['Sl.No', 'Job', 'Job_Description', 'Vendor', 'Vendor_Description',
'WO No', 'Accounting Center ', 'Accounting Center _Description',
'Nature Of Work', 'WO Type', 'WO Date', 'WO From Date', 'WO To Date',
'Bill No', 'Running Bill No', 'Bill Date', 'Bill Status', 'Voucher No',
'Voucher Date', 'Bank \nVoucher No', 'Bank Voucher\n Date',
' Paid Amount', 'Currency', 'WO Amt', 'Bill Amt', 'Service Tax Amt',
'VAT Amt', 'Total Tax \nAmt', ' Advance Amt', 'Gross Amt',
'Deduction Amt', 'Net Amt'],
dtype='object')
說明:
我們構建了一些作為對列表的東西(previous, current):
>>> previous_current = zip([None] + cols[:-1], cols)
>>> list(previous_current)
[(None, 'Sl.No'),
('Sl.No', 'Job'),
('Job', 'Description'),
('Description', 'Vendor'),
('Vendor', 'Description'),
('Description', 'WO No'),
('WO No', 'Accounting Center '),
('Accounting Center ', 'Description'),
('Description', 'Nature Of Work'),
('Nature Of Work', 'WO Type'),
('WO Type', 'WO Date'),
('WO Date', 'WO From Date'),
('WO From Date', 'WO To Date'),
('WO To Date', 'Bill No'),
('Bill No', 'Running Bill No'),
('Running Bill No', 'Bill Date'),
('Bill Date', 'Bill Status'),
('Bill Status', 'Voucher No'),
('Voucher No', 'Voucher Date'),
('Voucher Date', 'Bank \nVoucher No'),
('Bank \nVoucher No', 'Bank Voucher\n Date'),
('Bank Voucher\n Date', ' Paid Amount'),
(' Paid Amount', 'Currency'),
('Currency', 'WO Amt'),
('WO Amt', 'Bill Amt'),
('Bill Amt', 'Service Tax Amt'),
('Service Tax Amt', 'VAT Amt'),
('VAT Amt', 'Total Tax \nAmt'),
('Total Tax \nAmt', ' Advance Amt'),
(' Advance Amt', 'Gross Amt'),
('Gross Amt', 'Deduction Amt'),
('Deduction Amt', 'Net Amt')]
然后我們迭代它,并通過該對的第二個元素(當前列標簽)我們決定
是否保持原樣,或者
將其附加到前一列的標簽(該對的第一個元素)。

TA貢獻1860條經驗 獲得超9個贊
讓cols成為您原始列表的名稱。那么代碼可能是:
D = "Description"
previous_current = zip([None] + cols[:-1], cols)
df.columns = [curr if curr != D else prev + "_" + D for prev, curr in previous_current]
結果:
>>> df.columns
Index(['Sl.No', 'Job', 'Job_Description', 'Vendor', 'Vendor_Description',
'WO No', 'Accounting Center ', 'Accounting Center _Description',
'Nature Of Work', 'WO Type', 'WO Date', 'WO From Date', 'WO To Date',
'Bill No', 'Running Bill No', 'Bill Date', 'Bill Status', 'Voucher No',
'Voucher Date', 'Bank \nVoucher No', 'Bank Voucher\n Date',
' Paid Amount', 'Currency', 'WO Amt', 'Bill Amt', 'Service Tax Amt',
'VAT Amt', 'Total Tax \nAmt', ' Advance Amt', 'Gross Amt',
'Deduction Amt', 'Net Amt'],
dtype='object')
說明:
我們構建了一些作為對列表的東西(previous, current):
>>> previous_current = zip([None] + cols[:-1], cols)
>>> list(previous_current)
[(None, 'Sl.No'),
('Sl.No', 'Job'),
('Job', 'Description'),
('Description', 'Vendor'),
('Vendor', 'Description'),
('Description', 'WO No'),
('WO No', 'Accounting Center '),
('Accounting Center ', 'Description'),
('Description', 'Nature Of Work'),
('Nature Of Work', 'WO Type'),
('WO Type', 'WO Date'),
('WO Date', 'WO From Date'),
('WO From Date', 'WO To Date'),
('WO To Date', 'Bill No'),
('Bill No', 'Running Bill No'),
('Running Bill No', 'Bill Date'),
('Bill Date', 'Bill Status'),
('Bill Status', 'Voucher No'),
('Voucher No', 'Voucher Date'),
('Voucher Date', 'Bank \nVoucher No'),
('Bank \nVoucher No', 'Bank Voucher\n Date'),
('Bank Voucher\n Date', ' Paid Amount'),
(' Paid Amount', 'Currency'),
('Currency', 'WO Amt'),
('WO Amt', 'Bill Amt'),
('Bill Amt', 'Service Tax Amt'),
('Service Tax Amt', 'VAT Amt'),
('VAT Amt', 'Total Tax \nAmt'),
('Total Tax \nAmt', ' Advance Amt'),
(' Advance Amt', 'Gross Amt'),
('Gross Amt', 'Deduction Amt'),
('Deduction Amt', 'Net Amt')]
添加回答
舉報