将熊猫中的一列与另一列分组吗?

时间:2018-07-09 20:08:47

标签: pandas sorting pandas-groupby

我想获取一列的中位数,并使用另一列的关联值。例如,

   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方法可以工作吗?还是以某种方式使用排序?我需要定义自己的功能吗?

2 个答案:

答案 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 + applyloc

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

请注意,这将舍入所有中位数。