【问题标题】:pandas data frame iterating over 2 index variablespandas 数据框迭代 2 个索引变量
【发布时间】:2018-11-10 19:28:36
【问题描述】:

我有一个数据框,其中包含两个名为“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 

【问题讨论】:

  • 非常感谢,问题是我不仅有groupby ID,还有'DATE'索引的年份。这意味着我必须以某种方式摆脱这一年:(
  • 是否可以创建一些具有预期输出的示例数据?
  • 我希望我做到了,例如,我只想为每个 PERMNO 做年度平均交易量,所以我需要访问 DATE 索引,但我不知道如何。
  • 你觉得df['avg'] = df.groupby([df.index.get_level_values(0).year, 'PERMNO'])['Volume'].transform('mean') 吗?
  • 它不会抛出错误,所以我希望它有效。我只是想知道你是如何想出 index.get_level_values(0).year ..你能告诉我你是怎么发现的,这样我以后可以帮助自己吗?

标签: pandas dataframe indexing


【解决方案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

【讨论】:

    猜你喜欢
    • 2020-08-13
    • 2020-08-11
    • 2017-01-04
    • 2019-01-14
    • 1970-01-01
    • 2020-10-22
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多