我想获取一列的中位数,并使用另一列的关联值。例如,
col1 col2 index
0 1 3 A
1 2 4 A
2 3 5 A
3 4 6 B
4 5 7 B
5 6 8 B
6 7 9 B
我按索引分组以获得col 1的中位数,并使用col 2的关联值获得
col1 col2 index
2 4 A
5 7 B
我无法使用索引B的实际中值,因为它将对两个中间值取平均值,并且该值在第2列中没有对应的值。 最好的方法是什么? groupby方法可以工作吗?还是以某种方式使用排序?我需要定义自己的功能吗?
答案 0 :(得分:0)
似乎您需要从原始df中获得median
的中间位置
df.groupby('index')[['col1','col2']].apply(lambda x : pd.Series(sorted(x.values.tolist())[len(x)//2]))
Out[297]:
0 1
index
A 2 4
B 6 8
答案 1 :(得分:0)
似乎像groupby
+ apply
和loc
df.loc[~df.groupby('index').apply(lambda k: k['col1'] != int(k['col1'].median())).values]
使用int(...)
获得floor
的浮点数。也可以使用np.floor
(有关区别,请检查here)。
col1 col2 index
1 2 4 A
4 5 7 B
请注意,这将舍入所有中位数。