【问题标题】:Calculating a mean inside a dataframe and keeping old index python计算数据框中的平均值并保留旧索引python
【发布时间】:2018-07-24 07:05:54
【问题描述】:

下面的代码有问题

import pandas as pd


df = pd.DataFrame()
Fun1 = ['A','A','A','A','A','A','A','A','A','A','A','A','B',
        'B','B','B','B','B','B','B','B','B','B','B']
Fun2 = ['1','1','1','2','2','2','2','3','3','4','4','4','1',
        '1','2','2','2','2','2','3','3','3','3','4']
time = ['X','X','X','X','Y','Y','Y','Y','Z','Z','Z','Z','X',
        'X','X','X','Y','Y','Y','Y','Z','Z','Z','Z']
X = [1,5,3,3,4,3,1,5,3,3,4,3,4,1,1,5,4,3,4,1,5,4,3,4]
Y = [2,3,4,1,1,5,2,3,4,1,1,5,3,3,4,3,4,1,1,5,3,5,1,2]
df = df.assign(Fun1=Fun1,Fun2=Fun2,time=time,X=X,Y=Y)
df = df.set_index(['Fun1', 'Fun2'])

for (index, group) in df.groupby('Fun2'):

    dfx = group.groupby('time')['X','Y'].mean()  

我的数据框dfx 正在被time 索引,我需要它来保留它以前拥有的旧多索引。

有没有办法在数据框中取平均值并保留我的旧索引?

期望的输出

                        X    Y  time
Fun1    Fun2
A          1           x1   y1   X
B          1           x2   y2   X
A          2           x3   y3   Z
...

作为 x1、y1 等的平均值或每个多索引

【问题讨论】:

  • 您的示例无法运行。请再看一遍。
  • @coldspeed 现在已修复!
  • 你能显示你想要的输出吗?虽然我不认为这是可能的。
  • 我在问题中编辑

标签: python python-2.7 dataframe indexing


【解决方案1】:

不,您不能使用当前代码为结果保留旧的MultiIndex:它没有意义,因为您跨级别聚合。

不过,您可以保留Fun1,只要您也在Fun1 上分组:

df.reset_index()\
  .groupby(['Fun1', 'Fun2', 'time'])\
  .mean()\
  .reset_index(level=-1)

          time         X         Y
Fun1 Fun2                         
A    1       X  3.000000  3.000000
     2       X  3.000000  1.000000
     2       Y  2.666667  2.666667
     3       Y  5.000000  3.000000
     3       Z  3.000000  4.000000
     4       Z  3.333333  2.333333
B    1       X  2.500000  3.000000
     2       X  3.000000  3.500000
     2       Y  3.666667  2.000000
     3       Y  1.000000  5.000000
     3       Z  4.000000  3.000000
     4       Z  4.000000  2.000000

【讨论】:

  • 我使用了df.groupby([df.index.get_level_values('Fun1'), df.time])['X', 'Y'].mean(),它给我带来了更好的结果,虽然不理想但可行
  • @GabrielKochVasconcellos 你确定你知道你想要什么吗?如果您在 Fun2 和时间上进行分组,这意味着您正在分组 Fun1 的各种值,因此 Fun1 在您的结果中不再具有任何意义。你能想象这个吗?
  • 我是! Fun1 在代码的另一部分是必需的!我可以告诉你原因,但我认为这不会有太大帮助
  • @GabrielKochVasconcellos 好的,除非您还按 Fun1 分组,否则您无法保留它。那么,你也想在 Fun1 上进行分组吗?
  • 是的!这可能吗?
猜你喜欢
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
  • 2017-02-18
  • 2017-09-24
相关资源
最近更新 更多