我有一个熊猫数据框dd:
Experiment Position Lap ID Partition Value
Expt1 2000 104 127327203 2 52.01
Expt1 2000 105 127327203 2 51.78
Expt1 2000 106 127327203 2 51.57
Expt1 2000 107 127327203 2 51.63
Expt1 2000 108 127327203 2 51.61
Expt1 2000 109 127327203 2 51.78
Expt1 2000 110 127327203 2 51.78
Expt1 2000 111 127327203 2 51.53
Expt1 2000 112 127327203 2 51.69
Expt1 2000 113 127327203 2 51.53
Expt1 2000 114 127327203 2 51.40
Expt1 2000 115 127327203 2 51.45
Expt1 2000 116 127327203 2 51.47
Expt1 2000 117 127327203 2 51.61
Expt1 2000 118 127327203 2 50.89
Expt1 2500 104 127327203 2 52.16
Expt1 2500 105 127327203 2 53.14
Expt1 2500 106 127327203 2 52.02
我的数据有数千行,并进行了许多实验,因此以上只是快照。
我要按实验分组,然后按“位置”,然后按“圈”
grouped = dd.groupby(['Experiment','Position','Lap'])
grouped.first()
这给了我
我现在只想使用“ Lap”列中的第10个最大值来给我“ Value”列的均值和标准差。
如果可能的话,我想将上述计算的实验,位置和结果输出到一个新的数据框,以便随后进行绘图。
感谢您的帮助
答案 0 :(得分:1)
对于>=10
和GroupBy.transform
,首先用GroupBy.size
和Series.ge
用boolean indexing
计数来过滤:
df = df[df.groupby(['Experiment','Position'])['Value'].transform('size').ge(10)]
将DataFrame.sort_values
与GroupBy.tail
一起用于多列:
df1 = (df.sort_values(['Experiment','Position','Lap', 'Value'])
.groupby(['Experiment','Position'])
.tail(10))
print (df1)
Experiment Position Lap ID Partition Value
5 Expt1 2000 109 127327203 2 51.78
6 Expt1 2000 110 127327203 2 51.78
7 Expt1 2000 111 127327203 2 51.53
8 Expt1 2000 112 127327203 2 51.69
9 Expt1 2000 113 127327203 2 51.53
10 Expt1 2000 114 127327203 2 51.40
11 Expt1 2000 115 127327203 2 51.45
12 Expt1 2000 116 127327203 2 51.47
13 Expt1 2000 117 127327203 2 51.61
14 Expt1 2000 118 127327203 2 50.89
df2 = df1.groupby(['Experiment','Position'])['Value'].agg([('avg','mean'),
('q5', lambda x: x.quantile(.5))])
print (df2)
avg q5
Experiment Position
Expt1 2000 51.513 51.53