python - 提取具有最频繁值的行
问题描述
有一个包含几列的数据框,我想从中为每个具有最频繁数字(“否”)的个人“家庭”提取一行。我已经用一个似乎可以工作的 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)
我看过几个这样的例子,但我只能得到“家庭”和“否”而不是整行......
解决方案
这是使用duplicated
and mode+groupby
with 模式的替代方法:
c = df['No'].eq(df.groupby('Family')['No'].transform(lambda x: x.mode().iat[0]))
c1 = df[['Family','No']].duplicated()
output = df[c & ~c1]
Name Family Prob No
1 B b 0.6 10
4 E a 0.9 6
推荐阅读
- python - 使用动态列表进行网页抓取
- angular - EPERM:不允许操作,stat 'D:\Angular\Project\node_modules\@angular\material\material.d.ts'
- debugging - 如何在传递参数时在调试器中运行 Go 二进制文件?
- mongodb - $sort makes my query too slow in MongoDB
- java - 如何避免在 Spring Batch 的日志文件中打印以下自动检测到的配置信息?
- c++ - 给定太多隐藏层时,神经网络输出 nan
- assembly - 从单周期 MIPS 图推断值
- python - 读取包含多个 JSON 对象的文件(python)
- haskell - 如何将 Scotty 参数转换为字符串
- scala - 是否可以在没有宏的情况下编写无形 Generic.from 的模拟