我有这个数据框:
ID Code Timestamp Value
1 AAA 12345 11
1 AAB 12346 12
2 AAC 12345 1
2 AAC 12347 11
2 AAD 12348 1
3 ABC 12345 2
3 BBB 12448 1
3 BBB 12449 1
3 AAD 12450 2
3 AAE 12450 1
4 BBD 12346 1
ID 1和2在一个组中,而3和4在另一组中。我想获取每个组的行大小的平均值,最小值和最大值。
例如,具有1和2的组的平均值,最小值和最大值为:2.5、2、3。具有3和4的组的平均值,最小值和最大值为:3、1、5。>
我想做的是
def partition():
if id in [1, 2]:
return "Group A"
else:
return "Group B"
groupedDf = dataframe.groupby([partition, 'id'])
print(groupedDf.size())
#print it will give me
Group A ID
1 2
2 3
Group B ID
3 5
4 1
但是我找不到如上所述的平均值,最小值和最大值的优雅方法或熊猫方法。我现在所能想到的就是经典的迭代方式,例如:
for (key, group) in groupedDf
#do heavy lifting calculation here to get what I want.
希望问题足够详细,有人可以帮助我。
答案 0 :(得分:1)
df['Group'] = np.where(df['ID'].isin([1, 2]), 'A', 'B')
df2 = df.groupby(['Group','ID']).size()
df2.groupby('Group').agg(['mean', 'min', 'max'])
这就是我得到的:
mean min max
Group
A 2.5 2 3
B 3.0 1 5
答案 1 :(得分:0)
df['GROUP'] = df['ID'].map(lambda x: 'A' if x in ['1','2'] else 'B')
df
ID Code TIMESTAMP VALUE GROUP
0 1 AAA 12345 11 A
1 1 AAB 12346 12 A
2 2 AAC 12345 1 A
3 2 AAC 12347 11 A
4 2 AAD 12348 1 A
5 3 ABC 12345 2 B
6 3 BBB 12448 1 B
7 3 BBB 12449 1 B
8 3 AAD 12450 2 B
9 3 AAE 12450 1 B
10 4 BBD 12346 1 B
df.groupby(['GROUP'])['VALUE'].describe()[['min', 'max', 'mean']]
min max mean
GROUP
A 1.0 12.0 7.200000
B 1.0 2.0 1.333333