gpt4 book ai didi

python - 为特定行更新 pandas DataFrame 的单元格

转载 作者:行者123 更新时间:2023-11-28 17:59:02 27 4
gpt4 key购买 nike

我想为 pandas 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)

最佳答案

在您的情况下,您可以简单地使用:

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']

关于python - 为特定行更新 pandas DataFrame 的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56661951/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com