[英]How to append rows to a Pandas dataframe, and have it turn multiple overlapping cells (with the same index) into a single value, instead of a series?
[英]How to turn a series of Pandas dataframe rows into one column with multiple values?
現在,我有以下格式的Excel工作表,已將其轉換為Python中的Pandas數據框:
Name Column2 Unnamed: 2 Datatype Definition
0 Entity Accounts Receivable
1 term1 char term1
2 term2 numeric term2
3 term3 char term3
4 Entity Accounts Payable
5 term4 char term4
6 term5 char term5
7 term6 varchar term6
8 term7 numeric term7
我正在嘗試編寫一個代碼,該代碼將自動在Column2中的空單元格中填充每個術語名稱旁邊的“ Entity”對應值。 因此term1,term2和term3將是“應收帳款”,term4,term5,term6和term7將是“應付帳款”。
這是我到目前為止編寫的代碼:
df = pd.read_excel('test.xlsx')
df = df.replace(np.nan,'')
values = df.values.tolist()
ent_list = []
for values[0] in values:
if values[0][0] == 'Entity':
ent_list.append(values[0][1])
for j in range(len(values)):
for e in range(len(ent_list)):
while values[j][1] != ent_list[e]:
values[j][1] = ent_list[e]
break
e += 1
當我打印出“值”時,得到以下信息:
[['Entity', 'Accounts Payable', '', '', ''],
['term1', 'Accounts Payable', '', 'char', 'term1'],
['term2', 'Accounts Payable', '', 'numeric', 'term2'],
['term3', 'Accounts Payable', '', 'char', 'term3'],
['Entity', 'Accounts Payable', '', '', ''],
['term4', 'Accounts Payable', '', 'char', 'term4'],
['term5', 'Accounts Payable', '', 'char', 'term5'],
['term6', 'Accounts Payable', '', 'varchar', 'term6'],
['term7', 'Accounts Payable', '', 'numeric', 'term7']]
理想情況下,它應如下所示:
[['Entity', 'Accounts Receivable', '', '', ''],
['term1', 'Accounts Receivable', '', 'char', 'term1'],
['term2', 'Accounts Receivable', '', 'numeric', 'term2'],
['term3', 'Accounts Receivable', '', 'char', 'term3'],
['Entity', 'Accounts Payable', '', '', ''],
['term4', 'Accounts Payable', '', 'char', 'term4'],
['term5', 'Accounts Payable', '', 'char', 'term5'],
['term6', 'Accounts Payable', '', 'varchar', 'term6'],
['term7', 'Accounts Payable', '', 'numeric', 'term7']]
有沒有一種方法可以使用我目前使用的方法來實現? 我必須想象使用VBA可以做到這一點,但是老實說,使用Python會讓我更自在。 我將繼續修改此代碼,但是由於我不太有經驗,所以我真的很沮喪。
我知道我可以手動執行此操作,但這會花費很長時間,因為這些報告需要經常生成,並且通常包含40,000至70,000行,因此,我更希望將其自動化。
df = df.fillna(method = 'ffill')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.