pandas - 对 python pandas 数据框中的多个变量进行逆透视

标签 pandas dataframe unpivot

我有一个大数据框,显示每种产品的数量以及不同产品的成本。但是,我想将数据帧转换(逆透视)为一个长数据帧,其中每个产品名称作为 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)

当前数据框:

enter image description here

所需的数据框:

enter image description here

最佳答案

通过拆分列名并将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/

相关文章:

pandas - 尝试向 pandas 数据帧添加 2 列,但其中一列已被纳入索引

python - 如何使用 eval 数据框方法在表达式中使用自定义函数?

mysql - 高效地将列转为行

sql - 使用动态透视/逆透视来正确显示

python - 如何查找 Pandas 中组总数的百分比

python-3.x - 使用 python3 运行脚本时出错

python - key 错误:('1', 'occurred at index 0')

hadoop - pig 中的虚拟列

python - 使用一天中的特定时间或小时过滤 Pandas 数据框

r - 如何为列中每组相同值分配唯一的 ID 号