【发布时间】:2020-02-02 11:34:29
【问题描述】:
我有以下数据:
individual groupID choice probA probB
0 9710535 0 0 0.025589 0.008647
1 9710535 2 0 0.036252 0.014684
2 9710535 2 0 0.036252 0.013894
3 9710535 1 0 0.090057 0.030648
4 9710535 1 0 0.090057 0.014804
5 9710535 5 0 0.512675 0.021444
6 9710535 5 0 0.512675 0.020298
7 9710535 5 0 0.512675 0.163837
8 9710535 5 0 0.512675 0.085191
9 9710556 1 1 0.034381 0.796679
10 9710556 1 0 0.034381 0.796679
11 9710556 1 0 0.034381 0.796679
12 9710556 1 0 0.034381 0.157622
13 9710556 1 0 0.034381 0.157622
14 9710556 0 0 0.025589 0.008647
我想根据每个probA 上每个groupID 的最大值过滤每个individual 的数据,对于individual 9710535,这是groupID = 5。但是,如果该组的大小小于5,则就是这种情况(它只有 4 个元素),我还希望根据列 probB 将其他组的行放在顶部(5 - 该组的大小)。
最终结果应如下所示:
individual groupID choice probA probB
0 9710535 1 0 0.090057 0.030648
1 9710535 5 0 0.512675 0.021444
2 9710535 5 0 0.512675 0.020298
3 9710535 5 0 0.512675 0.163837
4 9710535 5 0 0.512675 0.085191
5 9710556 1 1 0.034381 0.796679
6 9710556 1 0 0.034381 0.796679
7 9710556 1 0 0.034381 0.796679
8 9710556 1 0 0.034381 0.157622
9 9710556 1 0 0.034381 0.157622
我正在使用此伪代码开发自定义函数方法:
def custom_filter(df, groub_by = 'individual',
condition_column1 = 'probA',
condition_column2 = 'probB',
top_count = 5)
return filtered_df
我将不胜感激!
【问题讨论】:
标签: python pandas dataframe pandas-groupby