我想连续为熊猫DataFrame
更新一些单元格,我正在使用update
来做,但是它总是只修改第一个索引,这是一个例子:
df = pd.DataFrame(data={'cod':[1000,1001], 'B': ['b1','b2'], 'C':['c1','c2']})
updated_data = pd.DataFrame({'cod':[1001], 'C':['newC1']})
updated_data2 = pd.DataFrame({'cod':[1000], 'B':['newB1']})
df.update(updated_data)
df.update(updated_data2)
此代码之后,df将具有:
cod B C
0 1000.0 newB1 newC1
1 1001.0 b2 c2
应该在什么时候
cod B C
cod
1000 1000.0 newB1 c1
1001 1001.0 b2 newC1
为了实现,我编写了以下代码,但是不知道它是否是最佳方法:
df = pd.DataFrame(data={'cod':[1000,1001], 'B': ['b1','b2'], 'C':['c1','c2']})
df = df.set_index(df.cod)
updated_data = pd.DataFrame({'cod':[1001], 'C':['newC1']})
updated_data = updated_data.set_index(updated_data.cod)
df.update(updated_data, overwrite=True)
updated_data = pd.DataFrame({'cod':[1000], 'B':['newB1']})
updated_data = updated_data.set_index(updated_data.cod)
df.update(updated_data, overwrite=True)
在我看来,它对于简单的事情非常冗长,还有另一种方法吗?
这是实际的代码,而不是两个updated_data
,实际上是在一个循环中:
df = pd.DataFrame(data={'cod':[1000,1001], 'B': ['b1','b2'], 'C':['c1','c2']})
df = df.set_index(df.cod)
for i in (1000,1001):
updated_data = pd.DataFrame({'cod':[i], 'C':['newC1']})
updated_data = updated_data.set_index(updated_data.cod)
df.update(updated_data, overwrite=True)
答案 0 :(得分:1)
在您的情况下,您可以简单地使用:
df.loc[df.cod == 1001, 'C'] = 'newC1'
df.loc[df.cod == 1000, 'B'] = 'newB1'
要使其速度更快,最好设置索引:
df = df.set_index(df.cod)
df.loc[df.index == 1001, 'C'] = 'newC1'
df.loc[df.index == 1000, 'B'] = 'newB1'
您可以使用列列表:
df.loc[df.index == 1001, ['C', 'B']] = ['newC', 'newB']