pandas - Pandas - 创建最大键值对的 DataFrame
问题描述
我有一个用于 ID 集合的键值对的 Pandas DataFrame。DataFrame 中的列是(ID、Key、Value)。
data = {
"ID":{0:1,1:1,2:1,3:2,4:2,5:2,6:3,7:3,8:3,9:4,10:4,11:4},
"Key":{0:"A",1:"B",2:"B",3:"A",4:"B",5:"B",6:"A",7:"B",8:"B",9:"A",10:"B",11:"C"},
"Value":{0:28,1:94,2:107,3:67,4:70,5:70,6:24,7:77,8:87,9:24,10:83,11:83}
}
data = pd.DataFrame(data)
我正在尝试创建一个新表,其中列是唯一键,它们的关联值是每个 ID 的最大值:
到目前为止,我能够创建一个包含所需最大值的 DataFrame:
max_data = data.loc[ data.groupby(["ID", "Key"])["Value"].idxmax() ]
但是,我不确定获取 DataFrame 的最佳方法,其中列是具有相关值的唯一键。这是我到目前为止所拥有的,但我试图避免循环:
result = pd.DataFrame(max_data["ID"].unique(), columns=["ID"])
for key in max_data["Key"].unique():
result = result.merge(
max_data.loc[max_data["Key"] == key][["ID", "Value"]],
how="left",
on="ID"
)
解决方案
就像是pivot_table
data.pivot_table(index='ID',columns='Key',values='Value',aggfunc='max')
Out[22]:
Key A B C
ID
1 28.0 107.0 NaN
2 67.0 70.0 NaN
3 24.0 87.0 NaN
4 24.0 83.0 83.0
推荐阅读
- wpf - WPF 工具栏 - 为什么一个按钮显示工具提示而不显示另一个?
- android - 如何使 SmsManager API 不同时显示发送的消息和接收的消息
- go - 访问链接后获取输出字符串
- ngx-bootstrap - 如何让 Bootstrap 面板与 ngx-bootstrap 一起工作
- flutter - Flutter 行溢出与列表
- reactjs - 为什么我不能在 next.js 页面中触发表单提交事件?
- c# - 读取 json 文件时无法将对象隐式转换为 System.collections.generic.Dictionary 错误
- java - 如何使所有按钮在 JavaFX 浏览器中正常工作?
- qt - QtQuick/QML中关于ScrollBar语法的正确理解是什么?
- c++17 - C++模板代码生成错误:在扣除'auto'之前使用'some_variable'