我正在尝试使用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,所以我不理解上面链接的答案。无论如何,这是它的不同版本。
答案 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)
另一种方法是默认利用groupby
对group_keys
进行排序。因此,groupby 'id, A'
将每A
的最小ID
组推到顶部。之后,在min
,B
和reset_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