python - 如何从熊猫的子类别中创建新列?
问题描述
我正在尝试获取子类别并将它们放入列中,以便我可以计算每列的值。
例如,我现在拥有的是:
c1 c2 c3
0 123 Orange 12
1 123 Car 15
2 123 Blue 14
3 123 Bike 13
4 234 Red 09
5 234 Bus 04
6 234 Train 19
7 234 Purple 17
我想要的是:
c1 c3 (colour) c3 (transport)
0 123 26 28
1 234 26 23
显然有大约 20,000 行和 50 列。
我尝试过使用 groupby 和其他一些功能,但我的大脑有点疲惫,我正在努力弄清楚如何让它以我想要的方式工作。
现在我正在使用一些东西来达到以下效果:
for x in df.c1.unique:
df['c3 (colour)'] = df[(df[c1] == x) & (df[c2] == colour)].sum()
我知道这是一种非常低效的方法,但现在这是我获得所需表格格式的唯一方法。我仍在尝试弄清楚如何正确使用 pandas,所以我对某些可以使其更快工作的命令有点不熟悉。
解决方案
像这样的东西会为你解决问题:
首先,如果您需要按Colour
/进行细分Transport
- 您需要相应地对其进行分类,因此:
>>> df
c1 c2 c3 c4
0 123 Orange 12 Colour
1 123 Car 15 Transport
2 123 Blue 14 Colour
3 123 Bike 13 Transport
4 234 Red 9 Colour
5 234 Bus 4 Transport
6 234 Train 19 Transport
7 234 Purple 17 Colour
然后为了得到你想要的东西(用“sumif”进行聚合):
>>> df.assign(c3_Colour=df["c3"][df["c4"]=="Colour"], c3_Transport=df["c3"][df["c4"]=="Transport"]).fillna(0).groupby(c1).agg({"c3_Colour":sum, "c3_Transport": sum})
c3_Colour c3_Transport
123 26.0 28.0
234 26.0 23.0
推荐阅读
- xml - 使用google脚本将电子表格转成xml文档时,google脚本将成品发送到哪里?
- c++ - 从递归函数c ++返回多个值
- flutter - Flutter 在异步函数中调用 Navigator.pop
- java - 向节点 53 发送获取请求 (sessionId=1175648978, epoch=189) 时出错:org.apache.kafka.common.errors.DisconnectException
- scala - 将任何转换为数组 [字符串]
- firebase - Firebase 云功能不会因重写而触发
- delphi - Graphics.Polygon 代码不起作用 - 我错过了什么?
- python - Python BeautifulSoup 没有输出
- docker - /etc/rc* 未在 Docker 中的 Ubuntu 18.04 上运行。启动时无法启动 cron
- android - 在 API 19 及更低版本中向 Spinners 添加边距不起作用