【问题标题】:Dataframe is not being updated with values; output is a warning 'copy of a slide'数据框未使用值更新;输出是警告“幻灯片副本”
【发布时间】:2017-10-17 00:59:15
【问题描述】:

我有两个具有以下值的数据框:

df1

               Cash
Date               
2011-01-10 -5114.85
2011-01-11 -5000.85 

df2

              GOOG    AAPL     XOM     IBM        Cash  
2011-01-10     0.0     0.0     0.0     0.0     -19.900 
2011-01-11     0.0     0.0     0.0     0.0       0.000

对于 df1 中的每个条目,我检查该索引是否存在于 df2 中。如果索引存在,那么我想将 df1 和 df2 的值添加到 df2;更新 df2 中的值,使其与 df1 中的值相同。

我正在尝试使用以下代码来实现:

for each in df1.index:
    if each in df2.index:
        df2.loc[each]['Cash'] = df1.loc[each]['Cash'] + df2.loc[each]['Cash']

控制台的输出是:

SettingWithCopyWarning: 试图在 DataFrame 中的切片副本上设置一个值 请参阅文档中的注意事项:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy df2.loc[each]['Cash'] = df1.loc[each]['Cash'] + df2.loc[each]['Cash']

我假设一个警告仍然会让我执行代码并更新我在 df2 中的列值...

错误

交易数据框未填充更新的值。

预期输出

              GOOG    AAPL     XOM     IBM        Cash  
2011-01-10     0.0     0.0     0.0     0.0     -5134.75 
2011-01-11     0.0     0.0     0.0     0.0     -5000.85

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    您可以使用df.index.intersection 查找公共索引,然后使用loc 访问所有相关行并添加。

    idx = df1.index.intersection(df2.index)
    df2.loc[idx, 'Cash'] += df1.loc[idx, 'Cash']
    
    print(df2)
                GOOG  AAPL  XOM  IBM     Cash
    2011-01-10   0.0   0.0  0.0  0.0 -5134.75
    2011-01-11   0.0   0.0  0.0  0.0 -5000.85
    

    【讨论】:

    • 我很抱歉;我想要的是,如果两个索引匹配,则将 df1 中的现金添加到 df2 中。像; -5114.85+-19.9 = -5134.75 谢谢。我已经更新了我的输出:(。
    • @Codinghierarchy 幸运的是,第二种方法几乎不需要修改即可适用于您的情况。见编辑。
    猜你喜欢
    • 2019-04-17
    • 2016-12-14
    • 2019-11-01
    • 2020-10-14
    • 2017-02-28
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    相关资源
    最近更新 更多