我有一个大数据框,显示每种产品的数量以及不同产品的成本。但是,我想将数据帧转换(逆透视)为一个长数据帧,其中每个产品名称作为 ID,其数量和成本位于两个不同的列中。我尝试过 pd.melt
和 ireshape 函数,但似乎都不起作用。
这是我正在尝试做的事情的一个例子。 这是我的 table
df = pd.DataFrame({ 'Year': [year1, year2,year3],
'A': [200,300,400],
'B': [500,600,300],
'C': [450,369,235],
'A cost': [7000, 4000, 7000 ],
'B cost': [9000, 4000, 6000],
'C cost': [1100, 4300, 2320],
})
print(df)
当前数据框:
所需的数据框:
最佳答案
通过拆分列名并将Year
设置为index
来创建MultiIndex,然后用amount
替换缺失值并按DataFrame.stack
reshape :
df = pd.DataFrame({ 'Year': 'year1,year2,year3'.split(','),
'A': [200,300,400],
'B': [500,600,300],
'C': [450,369,235],
'A cost': [7000, 4000, 7000 ],
'B cost': [9000, 4000, 6000],
'C cost': [1100, 4300, 2320],
})
print(df)
df1 = df.set_index('Year')
df1.columns = df1.columns.str.split(expand=True)
f = lambda x: 'amount' if pd.isna(x) else x
df1 = df1.rename(columns=f).stack(0).rename_axis(['Year','product']).reset_index()
print (df1)
Year product amount cost
0 year1 A 200 7000
1 year1 B 500 9000
2 year1 C 450 1100
3 year2 A 300 4000
4 year2 B 600 4000
5 year2 C 369 4300
6 year3 A 400 7000
7 year3 B 300 6000
8 year3 C 235 2320
关于pandas - 对 python pandas 数据框中的多个变量进行逆透视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73290546/