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')]
添加回答
举报