kri*_*izz 5 python sorting group-by max pandas
我不太擅长熊猫,我认为熊猫应该解决我的问题:我有一个文本文件,其中包含数据 ( id1; id2; value1; value2; value3)
1;2;30;40;20.3;
1;2;30;42;26.2;
3;5;12;55;10.7;
3;5;12;23;8.7;
3;5;12;33;11.2;
24;12;1;553;1.1;
24;12;1;23;1.9;
Run Code Online (Sandbox Code Playgroud)
其结果是,我想保持线,有平等的id1,id2,value1,和更高value3。Value2不重要,但需要保留,例如
1;2;30;42;26.2;
3;5;12;33;11.2;
24;12;1;23;1.9;
Run Code Online (Sandbox Code Playgroud)
您需要DataFrameGroupBy.idxmax的最大值的索引并通过value3进行选择:DataFrameloc
print (df.groupby(['id1','id2','value1']).value3.idxmax())
id1 id2 value1
1 2 30 1
3 5 12 4
24 12 1 6
Name: value3, dtype: int64
df = df.loc[df.groupby(['id1','id2','value1']).value3.idxmax()]
print (df)
id1 id2 value1 value2 value3 a
1 1 2 30 42 26.2 NaN
4 3 5 12 33 11.2 NaN
6 24 12 1 23 1.9 NaN
Run Code Online (Sandbox Code Playgroud)
另一种可能的解决方案是sort_values按列value3,然后groupby使用GroupBy.first:
df = df.sort_values('value3', ascending=False)
.groupby(['id1','id2','value1'], sort=False)
.first()
.reset_index()
print (df)
id1 id2 value1 value2 value3 a
0 1 2 30 42 26.2 NaN
1 3 5 12 33 11.2 NaN
2 24 12 1 23 1.9 NaN
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2588 次 |
| 最近记录: |