如何操作Pandas的多级索引?

2024-04-23 07:21:22 发布

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

这是我的多级数据帧的前5行-

              column1    column2
              count    sum       max
 column1
2516491004  2   0.232758    0.232758
2510581003  1   0.405012    0.405012
2591381007  6   3.535806    0.932517
2595381003  31  15.421238   0.757979
2594481008  4   1.129524    0.389363

我希望对column1中的每个条目填充column2[sum]/column1[count]和column2[max]/column1[count],作为我的新数据帧。例如,我的新数据帧的第一行应该是-

 column1    sum_value  max_value
2516491004  0.116379    0.116379

我是Python新手,搜索了很多,但是找不到正确的迭代方法。非常感谢您的帮助


Tags: 数据方法valuecount条目maxsumcolumn1
1条回答
网友
1楼 · 发布于 2024-04-23 07:21:22

如果在列上使用带有多索引的数据帧,则 到一个列是一个元组,其中包含(列)的每个级别的值 多重索引

因此,可能的解决方案之一是定义以下函数:

def fn(row):
    return pd.Series([
        row[('column2', 'sum')] / row[('column1', 'count')],
        row[('column2', 'max')] / row[('column1', 'count')]],
        index=['sum_value', 'max_value'])

然后应用它:

df.apply(fn, axis=1)

结果是一个新的DataFrame,索引与前面一样,有两列:

            sum_value  max_value
column1                         
2516491004   0.116379   0.116379
2510581003   0.405012   0.405012
2591381007   0.589301   0.155420
2595381003   0.497459   0.024451
2594481008   0.282381   0.097341

如果希望将列1作为常规列,请补充上述内容 带.reset_index()的指令

另一个更快的解决方案是:

pd.DataFrame({ 'sum_value': df[('column2', 'sum')] / df[('column1', 'count')],
    'max_value': df[('column2', 'max')] / df[('column1', 'count')]})

相关问题 更多 >