【发布时间】:2020-02-05 04:46:25
【问题描述】:
我想按其中一列对我的数据框进行分组,然后返回一个字典,其中包含每列值的所有行的列表。有没有一个快速的 Pandas 习语可以做到这一点?
例子:
test = pd.DataFrame({
'id': ['alice', 'bob', 'bob', 'charlie'],
'transaction_date': ['2020-01-01', '2020-01-01', '2020-01-02', '2020-01-02'],
'amount': [50.0, 10.0, 12.0, 13.0]
})
期望的输出:
result = {
'alice': [Series(transaction_date='2020-01-01', amount=50.0)],
'bob': [Series(transaction_date='2020-01-01', amount=10.0), Series(transaction_date='2020-01-02', amount=12.0)],
'charlie': [Series(transaction_date='2020-01-02', amount=53.0)],
}
以下方法不有效:
test.groupby('id').agg(list)
- 返回一个 Dataframe,其中每一列(amount 和 transaction_date)都有一个值列表,但这不是我想要的。我希望结果是每个唯一分组列值(“id”值)的行/熊猫系列列表。
test.groupby('id').agg(list).to_dict():
{'amount': {'charlie': [13.0], 'bob': [10.0, 12.0], 'alice': [50.0]}, 'transaction_date': {'charlie': ['2020-01-02'], 'bob': ['2020-01-01', '2020-01-02'], 'alice': ['2020-01-01']}}
test.groupby('id').apply(list).to_dict():
{'charlie': ['amount', 'id', 'transaction_date'], 'bob': ['amount', 'id', 'transaction_date'], 'alice': ['amount', 'id', 'transaction_date']}
【问题讨论】:
-
这似乎是一种奇怪的特殊和不常见的格式,你为什么要这个?
-
这是我想解决这个问题的另一种方式:stackoverflow.com/questions/60071112/…。我可以制作上面的查找字典,然后将一个函数应用到另一个数据帧的每一行,该数据帧使用二分搜索快速找到满足一组 transaction_date 条件的匹配事务。
标签: pandas dataframe pandas-groupby