我正在尝试遍历数据框中的项目并更新当前行。
我正在迭代(而不是使用 df.apply ),因为我需要根据数据框中的值处理文件。注意:由于各种原因,我不想在这里使用 df.apply。
df
是数据框
for key,item in df.iterrows():
df.xs(key)['downloaded']=True
如果我做
df[:5]
“已下载”字段尚未更新(显示为 False)。我怎样才能让它正确更新?
基本上我想要做的是更新给定键的单个列值。
正如@Phillip Cloud 指出的那样,loc
更适合这份工作。如果您将键指定为元组,您也可以设置多索引。
In [2]: mi = DataFrame(dict(
A = np.arange(5).astype(np.float64),
B = np.arange(5).astype(np.int64)),
index=MultiIndex.from_tuples(tuple(zip(*[['bar','bar','baz','baz','baz'],['one','two','one','two','three']])),names=['first','second']))
In [3]: mi
Out[3]:
A B
first second
bar one 0 0
two 1 1
baz one 2 2
two 3 3
three 4 4
In [4]: mi.loc[('baz','two'),'B'] = -5
In [5]: mi
Out[5]:
A B
first second
bar one 0 0
two 1 1
baz one 2 2
two 3 -5
three 4 4
xs()
默认情况下会创建数据的副本,因此要修改原始数据,您应该通过copy=False
:
for key,item in df.iterrows():
df.xs(key, copy=False)['downloaded']=True