gpt4 book ai didi

python - 在 pandas GroupBy 输出中将缺少的组键作为 NaN 包括在内

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:01 24 4
gpt4 key购买 nike

我在 Pandas 中有一个数据框。

test_df = pd.DataFrame({'date': ['2018-12-28', '2018-12-28', '2018-12-29', '2018-12-29', '2018-12-30', '2018-12-30'],
'transaction': ['aa', 'bb', 'cc', 'aa', 'bb', 'bb'],
'ccy': ['USD', 'EUR', 'EUR', 'USD', 'USD', 'USD'],
'amt': np.random.random(6)})

test_df:

date         transaction  ccy       amt
2018-12-28 aa USD 0.323439
2018-12-28 bb EUR 0.048948
2018-12-29 cc EUR 0.793263
2018-12-29 aa USD 0.013865
2018-12-30 bb USD 0.658571
2018-12-30 bb USD 0.224951

下面的代码给出了这个输出。

grouper = test_df.groupby([pd.Grouper('date'), 'transaction', 'ccy'])
grp_transactions = grouper['amt'].sum().unstack()

输出:

ccy                          EUR       USD
date transaction
2018-12-28 aa NaN 0.323439
bb 0.048948 NaN
2018-12-29 aa NaN 0.013865
cc 0.793263 NaN
2018-12-30 bb NaN 0.883523

我相信这是预期的,因为 groupby 函数将根据上述顺序对列中的值进行分组,相应地求和,并且不会为不在 DF 中的交易创建新行。

如果在使用 groupby 的特定日期未完成交易,pandas 是否有办法包含 NaN 值? IE。如果我的 DF 在 28/12/2018 没有交易:cc,那么两个 ccy 的输出都应该是 NaN。

预期输出:

ccy                          EUR       USD
date transaction
2018-12-28 aa NaN 0.323439
bb 0.048948 NaN
cc NaN NaN
2018-12-29 aa NaN 0.013865
bb NaN NaN
cc 0.793263 NaN
2018-12-30 aa NaN NaN
bb NaN 0.883523
cc NaN NaN

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

如果在分组之前将“交易”转换为分类列,这很容易,

df.transaction = pd.Categorical(df.transaction)
df.groupby(['date', 'transaction', 'ccy']).sum().unstack(2)

amt
ccy EUR USD
date transaction
2018-12-28 aa NaN 0.404488
bb 0.459295 NaN
cc NaN NaN
2018-12-29 aa NaN 0.439354
bb NaN NaN
cc 0.429269 NaN
2018-12-30 aa NaN NaN
bb NaN 1.542451
cc NaN NaN

输出中缺失的类别由 NaN 表示。这在执行数字聚合时通常是可能的。


如果你不想修改df,这样做:

u = pd.Series(pd.Categorical(df.transaction), name='transaction')
df.groupby(['date', u, 'ccy']).sum().unstack(2)

amt
ccy EUR USD
date transaction
2018-12-28 aa NaN 0.429134
bb 0.852355 NaN
cc NaN NaN
2018-12-29 aa NaN 0.541576
bb NaN NaN
cc 0.994095 NaN
2018-12-30 aa NaN NaN
bb NaN 0.744587
cc NaN NaN

关于python - 在 pandas GroupBy 输出中将缺少的组键作为 NaN 包括在内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54033021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com