【发布时间】:2020-06-27 12:25:14
【问题描述】:
有一个包含几列的数据框,我想从中为每个具有最频繁数字(“否”)的个人“家庭”提取一行。我已经用一个似乎可行的 for 循环对此进行了测试,但作为一个新手,我想知道是否有更短/更智能的方法。
这是一个简短的示例代码:
import pandas as pd
ind = [ ('A', 'a', 0.1 , 9) ,
('B', 'b', 0.6 , 10) ,
('C', 'b', 0.4 , 10) ,
('D', 'b', 0.2, 7) ,
('E', 'a', 0.9 , 6) ,
('F', 'b', 0.7 , 11)
]
df = pd.DataFrame(ind, columns = ['Name' , 'Family', 'Prob', 'No'])
res = pd.DataFrame(columns = df.columns)
for name,g in df.groupby('Family'):
v = g['No'].value_counts().idxmax()
idx = g['No'] == v
si = g[idx].iloc[0]
res = res.append(si)
print(res)
我查看了几个示例,其中一些示例类似于 this,但这样我只能得到“家庭”和“否”,而不是整行......
【问题讨论】:
标签: python pandas filter pandas-groupby