15

我有一个带有列结构的熊猫数据框(df):

month a b c d

该数据框包含一月、二月、三月、四月的数据。A、B、C、D 是数字列。对于二月份,我想重新计算列 A 并在数据框中更新它,即月份 = 二月,A = B + C + D

我使用的代码:

 df[df['month']=='Feb']['A']=df[df['month']=='Feb']['B'] + df[df['month']=='Feb']['C'] + df[df['month']=='Feb']['D'] 

这运行没有错误,但没有更改 2 月 A 列中的值。在控制台中,它给出了一条消息:

试图在 DataFrame 中的切片副本上设置一个值。
尝试改用 .loc[row_indexer,col_indexer] = value

我尝试使用 .loc,但现在我正在处理的数据框,我已经使用.reset_index()过它,我不确定如何设置索引和使用 .loc。我遵循了文档但不清楚。你能帮帮我吗?这是一个示例数据框:

 import pandas as pd import numpy as np
 dates = pd.date_range('1/1/2000', periods=8)
 df = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D']) 

我想更新一个日期:2000-01-03。我无法提供我的数据片段,因为它是实时数据。

4

2 回答 2

20

从警告中可以看出,您应该使用loc[row_index, col_index]. 当您对数据进行子集化时,您将获得索引值。你只需要传递 forrow_index然后用逗号col_name

df.loc[df['month'] == 'Feb', 'A'] = df.loc[df['month'] == 'Feb', 'B'] + df.loc[df['month'] == 'Feb', 'C'] + df.loc[df['month'] == 'Feb', 'D'] 
于 2015-12-28T19:43:46.293 回答
1

虽然不是最漂亮的,但我实现目标的方式(没有明确地迭代行)是:

df.ix[df['month'] == 'Feb', 'a'] = df[df['month'] == 'Feb']['b'] + df[df['month'] == 'Feb']['c']  

注意:自 Pandas v0.20.0ix 起已弃用iloc,支持/ loc

于 2015-12-28T19:44:13.243 回答