繁体   English   中英

Python Pandas,如何对字典列表进行分组和排序

[英]Python Pandas, how to group list of dict and sort

我有一个 dict 列表,如:

data = [
    {'ID': '000681', 'type': 'B:G+',  'testA': '11'},
    {'ID': '000682', 'type': 'B:G+',  'testA': '-'},
    {'ID': '000683', 'type': 'B:G+',  'testA': '13'},
    {'ID': '000684', 'type': 'B:G+',  'testA': '14'},
    {'ID': '000681', 'type': 'B:G+',  'testB': '15'},
    {'ID': '000682', 'type': 'B:G+',  'testB': '16'},
    {'ID': '000683', 'type': 'B:G+',  'testB': '17'},
    {'ID': '000684', 'type': 'B:G+',  'testB': '-'}
]

如何使用 Pandas 获取如下数据:

data = [
    {'ID': '000683', 'type': 'B:G+',  'testA': '13',  'testB': '17'},
    {'ID': '000681', 'type': 'B:G+',  'testA': '11',  'testB': '15'},
    {'ID': '000684', 'type': 'B:G+',  'testA': '14',  'testB': '-'},
    {'ID': '000682', 'type': 'B:G+',  'testA': '-',  'testB': '16'}

]

与一个 col 相同的ID和相同的type testAtestB值排序

sorted : testAtestB都在顶部有testA+testB值和较大的值。

首先将列转换为数字,将非数字替换为整数,然后聚合sum

df = pd.DataFrame(data)    
c = ['testA','testB']
df[c] = df[c].apply(lambda x: pd.to_numeric(x, errors='coerce'))

df1 = df.groupby(['ID','type'])[c].sum(min_count=1).sort_values(c).fillna('-').reset_index()
print (df1)
       ID  type testA testB
0  000681  B:G+    11    15
1  000683  B:G+    13    17
2  000684  B:G+    14     -
3  000682  B:G+     -    16

如果Series.argsort两列的总和排序,请使用Series.argsort

df = pd.DataFrame(data)
c = ['testA','testB']
df[c] = df[c].apply(lambda x: pd.to_numeric(x, errors='coerce'))

df2 = df.groupby(['ID','type'])[c].sum(min_count=1)
df2 = df2.iloc[(-df2).sum(axis=1).argsort()].fillna('-').reset_index()
print (df2)
       ID  type testA testB
0  000683  B:G+    13    17
1  000681  B:G+    11    15
2  000682  B:G+     -    16
3  000684  B:G+    14     -

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM