pandas - 根据出现频率过滤熊猫列
问题描述
我的df:
data = [
{'Part': 'A', 'Value': 10, 'Delivery': 10},
{'Part': 'B', 'Value': 12, 'Delivery': 8.5},
{'Part': 'C', 'Value': 10, 'Delivery': 10.1},
{'Part': 'D', 'Value': 10, 'Delivery': 10.3},
{'Part': 'E', 'Value': 11, 'Delivery': 9.2},
{'Part': 'F', 'Value': 15, 'Delivery': 7.3},
{'Part': 'G', 'Value': 10, 'Delivery': 10.1},
{'Part': 'H', 'Value': 12, 'Delivery': 8.1},
{'Part': 'I', 'Value': 12, 'Delivery': 8.0},
{'Part': 'J', 'Value': 10, 'Delivery': 10.2},
{'Part': 'K', 'Value': 8, 'Delivery': 12.5}
]
df = pd.DataFrame(data)
我希望从给定的数据帧中过滤出一个数据帧,以便它只包含最频繁出现的“值”。
预期输出:
data = [
{'Part': 'A', 'Value': 10, 'Delivery': 10},
{'Part': 'C', 'Value': 10, 'Delivery': 10.1},
{'Part': 'D', 'Value': 10, 'Delivery': 10.3},
{'Part': 'G', 'Value': 10, 'Delivery': 10.1},
{'Part': 'J', 'Value': 10, 'Delivery': 10.2}
]
df_output = pd.DataFrame(data)
有什么办法吗?
解决方案
使用boolean indexing
withSeries.mode
并通过以下方式选择第一个值Series.iat
:
df1 = df[df['Value'].eq(df['Value'].mode().iat[0])]
或按由 创建的 Series 中的第一个索引值进行比较Series.value_counts
,因为默认值按计数排序:
df1 = df[df['Value'].eq(df['Value'].value_counts().index[0])]
print (df1)
Part Value Delivery
0 A 10 10.0
2 C 10 10.1
3 D 10 10.3
6 G 10 10.1
9 J 10 10.2
推荐阅读
- laravel - laravel 中公共和私有文件的目录
- c# - 如何检查所有组件是否都加载到 .net core blazor 应用程序中?
- sybase - 在sybase中解析具有不同数字的字段
- mapbox - 在 Mapbox GL JS 中更新 Popup 数据
- r - 基于其他列的 ggplot2 方面的自定义轴中断
- cmd - 如何从 git bash 运行 devenv.exe 命令行开关(适用于 Visual Studio 2019)
- javascript - JavaScript 匿名函数参数和调用安排
- reactjs - React 错误中超出最大更新深度
- angular - 为什么 ng-select type ahead 会导致性能问题?
- azure-devops - 在 Azure DevOps REST Create 中查找附件