如何在带有层级索引的pandas dataframe中添加和计算(基于其他列)一个子列?

2024-09-24 02:25:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新来的熊猫,我正在努力掌握多指标数学。。。在

假设我们有一个包含2D列和2D行的pandas数据帧,在这个示例中,我们如何添加一个值等于的“sub column”('ALPHA', 'gamma')(same d1, same d2, 'ALPHA', 'alpha') + (same d1, d2-1, 'BETA', 'alpha'),即{}是10+2?在

ridx = pd.MultiIndex.from_tuples([('A',1),('A',2),('A',3),('B',1),('B',2),('B',3),('C',1),('C',2),('C',3)], names=['d1', 'd2'])
cidx = pd.MultiIndex.from_tuples([('ALPHA','alpha'),('ALPHA','beta'),('BETA','alpha'),('BETA','beta')], names=['d3', 'd4'])
dfmix = pd.DataFrame([(0,1,2,3),(10,11,12,13),(20,21,22,23),
                      (30,31,32,33),(40,41,42,43),(50,51,52,53),
                      (60,61,62,63),(70,71,72,73),(80,81,82,83),                     
                     ], index=ridx, columns=cidx)
dfmix 

dataframe


Tags: fromalphanamesbetad2d1pdsame
2条回答

您可以通过dfmix.columns[0..n]访问每个唯一列

以下内容有助于更好地理解:

In [129]: dfmix.columns[0]
Out[129]: ('ALPHA', 'alpha')

In [134]: dfmix[dfmix.columns[0]][1]
Out[134]: 10

In [136]: dfmix.columns[2]
Out[136]: ('BETA', 'alpha')

In [137]: dfmix[dfmix.columns[2]][0]
Out[137]: 2

In [138]: dfmix[dfmix.columns[0]][1] + dfmix[dfmix.columns[2]][0]
Out[138]: 12

一条线:

dfmix['ALPHA','gamma'] = dfmix['ALPHA','alpha']
                       + dfmix.groupby(level='d1').shift()['BETA','alpha']

pd.shift是根据需要对齐行的好工具。pd.groupby 用于在应用此操作之前对行进行分组。在

^{pr2}$

当然,如果数学公式没有意义的话,你就有了Nan值。在

相关问题 更多 >