Pandas中的透视数据框

mrwjdhj3  于 2023-06-20  发布在  其他
关注(0)|答案(2)|浏览(115)

当前df:
| 周|销售|收入|
| - -----|- -----|- -----|
| 1|三十四|五十六|
| 2|四十二|五十七|
| 3|二十个|六|
我尝试得到以下结构:
| 周|技术参数|共计|
| - -----|- -----|- -----|
| 1|销售|三十四|
| 1|收入|五十六|
| 2|销售|四十二|
| 2|收入|五十七|
| 3|销售|二十个|
| 3|收入|六|
我已经尝试了下面的方法,但是I 'values'只接受一列。

pivot = pd.pivot_table(df1, values = 'Sales', index=['Week','Revenue'], columns = 'Week').reset_index
fae0ux8s

fae0ux8s1#

只需使用melt,即pivot的逆操作。
https://pandas.pydata.org/docs/user_guide/reshaping.html#reshaping-by-melt

df1.melt(id_vars=["Week"], var_name="Parameter", value_name="Total")

请注意,stack也在执行类似的操作(unstack类似于pivot)。但是stack/unstack仅仅依赖于(多)索引来理解您想要做什么,而melt/pivot更易于配置。

kx5bkwkv

kx5bkwkv2#

另一种可能的解决方案:

(df.set_index('Week').stack().reset_index()
 .set_axis(['Week', 'Parameter', 'Total'], axis=1))

或者,

(df.set_index('Week').stack().rename('Total').to_frame()
 .reset_index(names=['Week', 'Parameter']))

输出:

Week Parameter  Total
0     1     Sales     34
1     1   Revenue     56
2     2     Sales     42
3     2   Revenue     57
4     3     Sales     20
5     3   Revenue      6

相关问题