熊猫数据框遍历2个索引变量

时间:2018-11-10 19:28:36

标签: pandas dataframe indexing

我有一个数据框,其中包含2个索引,分别为“ DATE”(每月数据)和“ ID”,以及一个名为Volume的列变量。现在,我要遍历它,并为每个唯一ID用新列中Volume的平均值填充一个新列。

基本思想是找出每个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 

1 个答案:

答案 0 :(得分:1)

您可以将transformyear一起用于相同大小的系列,例如原始DataFrame

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