0

我正在尝试获取子类别并将它们放入列中,以便我可以计算每列的值。

例如,我现在拥有的是:

   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,所以我对某些可以使其更快工作的命令有点不熟悉。

4

1 回答 1

0

像这样的东西会为你解决问题:

首先,如果您需要按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
于 2019-09-02T21:58:11.057 回答