python - 在 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函数。
谢谢。
解决方案
您可以unstack
在B
填充任何一个y_1
或y_2
0 的缺失时调整级别。然后我们选择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
推荐阅读
- anylogic - 使用状态图对卡车交付建模的意外结果?
- python - 在循环中暂停 python 代码并检查图形窗口
- grails - 如何在默认的 grails 4 应用程序中查看 h2 数据库
- swift - Admob adViewDidReceiveAd 在 TableViewCell 中不起作用
- regex - 正则表达式模式:如何检查两边都没有的单词
- haskell - 您如何在参数中使用 StdGen 类型?
- r - Desktop Application to Run R Scripts
- python - Insert 3D model in mplot3D
- hyperledger-fabric - 动态地将频道添加到现有网络
- r - Using igraph/network packages, how do I determine if network is fully connected (each vertex can reach each other vertex somehow)