Pandas 遍历2个索引变量的数据帧

Pandas 遍历2个索引变量的数据帧,pandas,dataframe,indexing,Pandas,Dataframe,Indexing,我有一个数据框架,它有两个索引“DATE”(是每月数据)和“ID”,还有一个列变量Volume。现在我想对它进行迭代,并为每个唯一ID填充一个新列,其中包含一个新列中列体积的平均值 基本思想是找出每个ID的月份高于年平均值 list(df.index) (Timestamp('1970-09-30 00:00:00'), 12167.0) print(df.index.name) None 我似乎没有找到一个教程来解决这个问题:( 有人能给我指一下正确的方向吗

我有一个数据框架,它有两个索引“DATE”(是每月数据)和“ID”,还有一个列变量Volume。现在我想对它进行迭代,并为每个唯一ID填充一个新列,其中包含一个新列中列体积的平均值

基本思想是找出每个ID的月份高于年平均值

list(df.index)

(Timestamp('1970-09-30 00:00:00'), 12167.0)

print(df.index.name)

None
我似乎没有找到一个教程来解决这个问题:(

有人能给我指一下正确的方向吗

                    SHRCD  EXCHCD   SICCD     PRC     VOL       RET    SHROUT  \
DATE       PERMNO                                                               
1970-08-31 10559.0   10.0     1.0  5311.0  35.000  1692.0  0.030657   12048.0   
           12626.0   10.0     1.0  5411.0  46.250   926.0  0.088235    6624.0   
           12749.0   11.0     1.0  5331.0  45.500  5632.0  0.126173   34685.0   
           13100.0   11.0     1.0  5311.0  22.000  1759.0  0.171242   15107.0   
           13653.0   10.0     1.0  5311.0  13.125   141.0  0.220930    1337.0   
           13936.0   11.0     1.0  2331.0  11.500   270.0 -0.053061    3942.0   
           14322.0   11.0     1.0  5311.0  64.750  6934.0  0.024409  154187.0   
           16969.0   10.0     1.0  5311.0  42.875  1069.0  0.186851   13828.0   
           17072.0   10.0     1.0  5311.0  14.750   777.0  0.026087    5415.0   
           17304.0   10.0     1.0  5311.0  24.875  1939.0  0.058511    8150.0 
对于与原始数据帧一样大小的系列,您可以使用:

print (df)
                    VOL
DATE       PERMNO      
1970-08-31 10559.0    1
           10559.0    2
           12749.0    3
1971-08-31 13100.0    4
           13100.0    5

df['avg'] = df.groupby([df.index.get_level_values(0).year, 'PERMNO'])['VOL'].transform('mean')
print (df)
                    VOL  avg
DATE       PERMNO           
1970-08-31 10559.0    1  1.5
           10559.0    2  1.5
           12749.0    3  3.0
1971-08-31 13100.0    4  4.5
           13100.0    5  4.5

非常感谢,问题是我不仅有groupby ID,还有“日期”索引的年份。这意味着我必须以某种方式从中获得年份:(是否可以创建一些具有预期输出的样本数据?我希望我这样做了,我只想为每个PERMNO做每年的平均量,因此我需要访问日期索引,但我不知道如何访问。您认为
df['avg']=df.groupby([df.index.get_level_value(0.year,'PERMNO'])['volume']转换('mean'))
?它不会抛出错误,所以我希望它能起作用。我只是对你是如何提出索引的感到困惑。获取级别值(0)。年份。你能告诉我你是如何发现的,这样我以后可以帮助自己吗?