gpt4 book ai didi

python - 操作 pivot_table 中的多索引列

转载 作者:行者123 更新时间:2023-12-04 17:14:05 24 4
gpt4 key购买 nike

我看到这个问题被问过多次,但其他问题的解决方案没有奏效!

我有这样的数据框

df = pd.DataFrame({
"date": ["20180920"] * 3 + ["20180921"] * 3,
"id": ["A12","A123","A1234","A12345","A123456","A0"],
"mean": [1,2,3,4,5,6],
"std" :[7,8,9,10,11,12],
"test": ["a", "b", "c", "d", "e", "f"],
"result": [70, 90, 110, "(-)", "(+)", 0.3],})

df

使用数据透视表

df_sum_table = (pd.pivot_table(df,index=['id'], columns = ['date'], values = ['mean','std']))

我得到了

enter image description here

df_sum_table.columns

MultiIndex([('mean', '20180920'),
('mean', '20180921'),
( 'std', '20180920'),
( 'std', '20180921')],
names=[None, 'date'])

所以我想将 date 列移到下方一行并删除 id 行。但保留 id 名称。通过遵循这些过去的解决方案

ValueError when trying to have multi-index in DataFrame.pivot

Removing index name from df created with pivot_table()

Resetting index to flat after pivot_table in pandas

pandas pivot_table keep index

df_sum_table = (pd.pivot_table(df,index=['id'], columns = ['date'], values = ['mean','std'])).reset_index().rename_axis(None, axis=1)

但出现错误

TypeError: Must pass list-like as names.

如何删除 date 但将 id 保留在第一列中?

期望的输出

enter image description here

@杰斯雷尔

最佳答案

尝试使用 rename_axis:

df = df.pivot_table(index=['id'], columns = ['date'], values = ['mean', 'std']).rename_axis(columns={'date': None}).fillna('').reset_index().T.reset_index(level=1).T.reset_index(drop=True).reset_index(drop=True)
df.index = df.pop('id').replace('', 'id').tolist()
print(df)

输出:

             mean      mean       std       std
id 20180920 20180921 20180920 20180921
A0 6 12
A12 1 7
A123 2 8
A1234 3 9
A12345 4 10
A123456 5 11

您可以使用 rename_axis 并使用字典映射重命名特定的列轴名称。我为列轴名称映射指定列参数。

关于python - 操作 pivot_table 中的多索引列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69008275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com