Dataframe没有使用值更新;输出是警告'幻灯片副本'

时间:2017-10-17 00:59:15

标签: python pandas dataframe merge

我有两个数据框,其中包含以下值:

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

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

1 个答案:

答案 0 :(得分: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