当A

时间:2019-06-09 18:56:41

标签: python pandas group-by

我正在尝试使用Pandas分析数据框。我的问题类似于这个问题:

How to get rows with min values in one column, grouped by other column, while keeping other columns?

除了这个问题(在我的情况下这很重要)之外,如果分组列有多个最小值,我还需要查找其他列的最小值。如果没有,我需要查看相应的值。

这是一个基本示例;

df = pd.DataFrame({'id' : [1,1,1,2,2],
                   'A' : [8,6,6,8,9],
                   'B' : [1,2,4,5,4]})

当我根据需要将此数据帧按“ id”分组并汇总(首先在“ A”上,然后在“ B”上)时,这是我要查看的输出:

id  A   B   
1   6   2
2   8   5

请注意,当id为1时,有多个行的“ A”列具有最小值。相应的“ B”列值为2和4。因此,它们的最小值作为“”的结果返回。 B'列。

我不知道R,所以我不理解上面链接的答案。无论如何,这是它的不同版本。

2 个答案:

答案 0 :(得分:3)

IIUC,按B排序后使用df.loc[df.sort_values('B').groupby('id')['A'].idxmin()]


   id  A  B
1   1  6  2
3   2  8  5

    "expo": "^33.0.0",
    "react": "16.8.3",
    "react-dom": "^16.8.6",
    "react-native": "https://github.com/expo/react-native/archive/sdk-33.0.0.tar.gz",
    "react-native-web": "^0.11.4",
    "@firebase/auth": "^0.9.7",
    "@firebase/firestore": "^1.1.3",
    "firebase": "^5.9.3"
  },

答案 1 :(得分:1)

另一种方法是默认利用groupbygroup_keys进行排序。因此,groupby 'id, A'将每A的最小ID组推到顶部。之后,在minBreset_index

上呼叫drop_duplicate
df.groupby(['id', 'A'])['B'].min().reset_index().drop_duplicates(subset='id')


Out[298]:
   id  A  B
0   1  6  2
2   2  8  5
相关问题