我有一个PandasDataFrame看起来:
df=pd.DataFrame({'user': ['user 1', 'user 4', 'user 1', 'user 4', 'user 1', 'user 4'],
'group': [0, 0, 1, 1, 2, 2],
'x1': [0.9, 0.9, 0.7, 0.7, 0.4, 0.4],
'x2': [0.759740, 1.106061, 0.619357, 1.260234, 0.540633, 1.437956]})
输出:
user group x1 x2
0 user 1 0 0.9 0.759740
1 user 4 0 0.9 1.106061
2 user 1 1 0.7 0.619357
3 user 4 1 0.7 1.260234
4 user 1 2 0.4 0.540633
5 user 4 2 0.4 1.437956
我想向每个用户返回一个条件,如果x2小于x1,则返回此行,如果x2小于x1时没有满足此条件的行,则返回此用户,并将更改组编号设置为10。
例如:对于用户1,应该选择行号2,因为它返回的最小值为x2,低于x11,甚至行4的最小值为x2,但x2高于x1。对于用户4,所有行的所有x2都高于x1,因此我们将最小值为x2的组号更改为编号10。
预期产出:
1条答案
按热度按时间plicqrtu1#
use:
首先按
boolean indexing
中的条件筛选行:然后按
DataFrameGroupBy.idxmin
按每组最小x2
获取组名,因此使用DataFrame.set_index
:然后按
Series.reindex
中的唯一值添加缺少的用户:最后,通过
Series.reset_index
创建2列DataFrame。