import pandas as pd
import numpy as np
rng = np.random.RandomState(0)
df = pd.DataFrame({'key':['A', 'B', 'C', 'A', 'B', 'C'],
'data1': range(6),
'data2': rng.randint(0, 10, 6)},
columns=['key', 'data1', 'data2'])
df
key data1 data2
0 A 0 5
1 B 1 0
2 C 2 3
3 A 3 3
4 B 4 7
5 C 5 9
L = [0, 1, 0, 1, 2, 0]
print(df.groupby(L).sum())
输出为:
data1 data2
0 7 17
1 4 3
2 4 7
我需要清楚的解释吗?! L
中的0、1和2是什么?它们是key
的{{1}}列吗?还是它们的索引标签为df
?以及如何根据df
进行分组分组?
答案 0 :(得分:2)
L是您的示例中的整数列表。当您对L进行分组时,您只是在说:查看此整数列表,然后根据这些唯一的整数对我的df进行分组。
我认为可视化是有道理的(请注意,df中没有L列-我只是为了可视化而添加了):
groupby L表示-取唯一值(在这种情况下为0,1和2),并对data1和data2求和。因此,当L = 0时data1的结果将是data1:0 + 2 + 5 = 7(以此类推)
,最终结果将是:
df.groupby(L).sum()
data1 data2
0 7 17
1 4 3
2 4 7
答案 1 :(得分:2)
您可以使用列表对dataframe
中的观察值进行分组。例如,假设您有几个人的身高:
import pandas as pd
df = pd.DataFrame({'names':['John', 'Mark', 'Fred', 'Julia', 'Mary'],
'height':[180, 180, 180, 160, 160]})
print(df)
names height
0 John 180
1 Mark 180
2 Fred 180
3 Julia 160
4 Mary 160
在其他地方,您收到了他们分配的组:
sex = ['man', 'man', 'man', 'woman', 'woman']
您无需将新列连接到dataframe
即可,只需将它们分组即可。您可以使用列表来完成工作:
df.groupby(sex).mean()
height
man 180
woman 160
答案 2 :(得分:0)
您可以在此处查看其工作方式:
In [6006]: df.groupby(L).agg(list)
Out[6006]:
key data1 data2
0 [A, C, C] [0, 2, 5] [5, 3, 9]
1 [B, A] [1, 3] [0, 3]
2 [B] [4] [7]
In [6002]: list(df.groupby(L))
Out[6002]:
[(0, key data1 data2
0 A 0 5
2 C 2 3
5 C 5 9),
(1, key data1 data2
1 B 1 0
3 A 3 3),
(2, key data1 data2
4 B 4 7)]
在L中,它将“ 0”键(即ACC),索引0,2m5分组为1密钥是BA,索引1,3,而两个键是“ B”,索引4。
这是由于L键的对齐:
df['L'] = L
key data1 data2 L
0 A 0 5 0
1 B 1 0 1
2 C 2 3 0
3 A 3 3 1
4 B 4 7 2
5 C 5 9 0
我希望这是有道理的