首页 > 解决方案 > 在 Pandas 中使用 Groupyby 结果中的值来命名新数据框中的列

问题描述

我有一个问题:我有一个包含列('A'、'B'、'C'、'D')的数据框,我将其按两列('A'、'B')分组,然后我使用了计数功能。 temp_df = df.groupby(['A', 'B']).count()

结果是这样的

一个 C D
x_1 y_1 3 3
y_2 5 5
x_2 y_1 1 1
x_3 y_1 2 2
x_4 y_1 7 7
y_2 8 8

还有一点:列B是二进制的,我的意思是要么是y_1要么y_2。但 Column 中的值A可以是任何值。还有其他一些东西,如果我们x_1 --> y_2在数据框中,必须有x_1 --> y_1,这是有保证的。现在我想要另一个包含这些列的数据框:

一个 y_1 y_2
x_1 3 5
x_2 1 0
x_3 2 0
x_4 7 8

但我不知道该怎么做。

ps:我知道我可以使用for循环但是它效率低下,我想使用pandas函数。

谢谢。

标签: pythonpandasdataframe

解决方案


您可以unstackB填充任何一个y_1y_20 的缺失时调整级别。然后我们选择C列的值,如D注释中所述可以省略:

>>> df.unstack("B", fill_value=0).C

B    y_1  y_2
A
x_1    3    5
x_2    1    0
x_3    2    0
x_4    7    8

如果你想摆脱B左上角(作为列放在那里),你可以进一步将该轴重命名为None

>>> df.unstack("B", fill_value=0).C.rename_axis(columns=None)

     y_1  y_2
A
x_1    3    5
x_2    1    0
x_3    2    0
x_4    7    8

A这里是索引,要使其成为列,我们可以重置索引:

>>> df.unstack("B", fill_value=0).C.rename_axis(columns=None).reset_index()

     A  y_1  y_2
0  x_1    3    5
1  x_2    1    0
2  x_3    2    0
3  x_4    7    8

推荐阅读