【问题标题】:Python: pick elements with different indexes and store them in a new Dataframe column in PandasPython:选择具有不同索引的元素并将它们存储在 Pandas 的新 Dataframe 列中
【发布时间】:2017-10-14 01:55:20
【问题描述】:

我有一个如下所示的 DataFrame:

我想要的是计算以下操作,在循环中描述:

for ii in range(0,len(df['Avg'])):
    if ii==0:
        df['Return'][ii]=0
    else:
        df['Return'][ii] = (df['Avg'][ii])/(df['Avg'][ii-1])-1

我想使用 'Avg' 列中的 'present' 和 'previous' 元素进行该操作,但我收到此错误:

试图在数据帧的切片副本上设置值

请参阅文档中的注意事项: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy df['Return'][ii]=0 C:/Users/julio/Desktop/Python Scripts/Euclid Capital Scripts/DukasCopy/duka_test:34: SettingWithCopyWarning: A 正在尝试在 DataFrame 中的切片副本上设置值

请参阅文档中的注意事项: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy df['返回'][ii] = (df['Avg'][ii])/(df['Avg'][ii-1])-1

还有其他方法可以实现我想要的并将这些值存储在“返回”列中吗?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    你可以使用.pct_change:

    df.loc[:, 'Return'] = df['Avg'].pct_change()
    

    或者,以前导零而不是 NaN 开头,链接 .fillna

    df.loc[:, 'Return'] = df['Avg'].pct_change().fillna(0.)
    

    至于您看到的警告,已经有很多关于这里发生的事情的信息:

    在您的情况下,使用 df['Return'][ii] 是导致这种情况的原因。您正在使用链式索引,使用.loc.iloc 会更安全。

    例子:

    df = pd.DataFrame({'Avg' : np.random.rand(10) + 1},
                      index=pd.date_range('2017-02', periods=10))
    df.loc[:, 'Return'] = df['Avg'].pct_change().fillna(0.)
    print(df)
                    Avg   Return
    2017-02-01  1.86389  0.00000
    2017-02-02  1.19992 -0.35623
    2017-02-03  1.08414 -0.09649
    2017-02-04  1.17281  0.08179
    2017-02-05  1.30422  0.11204
    2017-02-06  1.59484  0.22284
    2017-02-07  1.63399  0.02455
    2017-02-08  1.99155  0.21883
    2017-02-09  1.54733 -0.22305
    2017-02-10  1.50584 -0.02682
    

    【讨论】:

      猜你喜欢
      • 2022-10-21
      • 2015-12-03
      • 1970-01-01
      • 2017-09-02
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 2014-09-06
      相关资源
      最近更新 更多