python 变量 组合_包含分类变量组合的GroupBy

三年后,我重新审视了这个问题,并给出了这个问题的一般解决方案

它正在这个开源库中使用,这就是为什么我现在能够做到这一点here,它可以处理任意数量的索引,并使用numpy矩阵广播在它们上创建组合

所以首先,这不是一个有效的数据帧。索引不是唯一的。让我们为该对象添加另一个索引并使其成为一个序列:df = pd.DataFrame({

'unique': [1, 2, 3, 4, 5, 6],

'index': ['a','b','c','a','b','c'],

'column': [1,2,3,4,1,2]

}).set_index(['unique','index'])

s = df['column']

让我们解开这个索引:

^{pr2}$

>>> sum = np.nansum(vals, axis=0)

>>> count = (~np.isnan(vals)).sum(axis=0)

>>> mean = (sum + sum[:, np.newaxis]) / (count + count[:, np.newaxis])

array([[ 2.5, 2. , 2.5],

[ 2. , 1.5, 2. ],

[ 2.5, 2. , 2.5]])

现在重新创建输出数据帧:>>> new_df = pd.DataFrame(mean, unstacked.columns, unstacked.columns.copy())

index_ a b c

index

a 2.5 2.0 2.5

b 2.0 1.5 2.0

c 2.5 2.0 2.5

>>> idxs_ = [ x+'_' for x in idxs ]

>>> new_df.columns.names = idxs_

>>> new_df.stack(idxs_, dropna=False)

index index_

a a 2.5

b 2.0

c 2.5

b a 2.0

b 1.5

c 2.0

c a 2.5

b 2.0

c 2.5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值