Python 熊猫聚集数据时,列保持不变
我有一个数据框,一个:Python 熊猫聚集数据时,列保持不变,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个数据框,一个: a=pd.DataFrame({'ID': [1,1,2,2,3,4], 'B': [1,5,3,2,4,1], 'C': [1,4,3,6,1,1]}) ID B C 0 1 1 1 1 1 5 4 2 2 3 3 3 2 2 6 4 3 4 1 5 4 1 1 我想对其进行聚合,以便生成的新数据帧将按ID分组,并返回与B的min对应的行(因此对B应用min()并按原样携带C) 因此,生成的数据帧应为:
a=pd.DataFrame({'ID': [1,1,2,2,3,4], 'B': [1,5,3,2,4,1], 'C': [1,4,3,6,1,1]})
ID B C
0 1 1 1
1 1 5 4
2 2 3 3
3 2 2 6
4 3 4 1
5 4 1 1
我想对其进行聚合,以便生成的新数据帧将按ID分组,并返回与B的min对应的行(因此对B应用min()并按原样携带C)
因此,生成的数据帧应为:
ID B C
0 1 1 1
1 2 2 6
2 3 4 1
3 4 1 1
如何使用pandas.groupby()以编程方式执行此操作,或者是否有其他方法执行此操作?尝试在您的
groupby
之前进行排序,然后先执行:
a.sort_values('B').groupby('ID',as_index=False).first()
ID B C
0 1 1 1
1 2 2 6
2 3 4 1
3 4 1 1
或者,可能更快的方法是按ID
和B
排序,然后删除重复的ID
s,保留第一个(这是drop\u duplicates
的默认行为):
当涉及到排序,并且分组不涉及任何计算时,我更喜欢使用底层的numpy
数组来提高性能
使用argsort
和numpy.unique
:
arr = a.values
out = arr[np.argsort(arr[:, 1])]
_, idx = np.unique(out[:, 0], return_index=True)
out[idx]
要将值重新分配给数据帧,请执行以下操作:
pd.DataFrame(out[idx], columns=a.columns)
可以使用groupby和transform筛选行
a.loc[a['B'] == a.groupby('ID').B.transform('min')]
B C ID
0 1 1 1
3 2 6 2
4 4 1 3
5 1 1 4
pd.DataFrame(out[idx], columns=a.columns)
ID B C
0 1 1 1
1 2 2 6
2 3 4 1
3 4 1 1
a.loc[a['B'] == a.groupby('ID').B.transform('min')]
B C ID
0 1 1 1
3 2 6 2
4 4 1 3
5 1 1 4