gpt4 book ai didi

python - Pandas 一次更新多个列

转载 作者:IT老高 更新时间:2023-10-28 21:12:43 26 4
gpt4 key购买 nike

我正在尝试一次更新几个字段 - 我有两个数据源,我正在尝试协调它们。我知道我可以做一些丑陋的合并然后删除列,但希望下面的代码可以工作:

df = pd.DataFrame([['A','B','C',np.nan,np.nan,np.nan],
['D','E','F',np.nan,np.nan,np.nan],[np.nan,np.nan,np.nan,'a','b','d'],
[np.nan,np.nan,np.nan,'d','e','f']], columns = ['Col1','Col2','Col3','col1_v2','col2_v2','col3_v2'])

print df

Col1 Col2 Col3 col1_v2 col2_v2 col3_v2
0 A B C NaN NaN NaN
1 D E F NaN NaN NaN
2 NaN NaN NaN a b d
3 NaN NaN NaN d e f

#update
df.loc[df['Col1'].isnull(),['Col1','Col2', 'Col3']] = df[['col1_v2','col2_v2','col3_v2']]

print df

Col1 Col2 Col3 col1_v2 col2_v2 col3_v2
0 A B C NaN NaN NaN
1 D E F NaN NaN NaN
2 NaN NaN NaN a b d
3 NaN NaN NaN d e f

我想要的输出是:

 Col1 Col2 Col3 col1_v2 col2_v2 col3_v2
0 A B C NaN NaN NaN
1 D E F NaN NaN NaN
2 a b c a b d
3 d e f d e f

我打赌它与更新/设置切片有关,但我总是使用 .loc 来更新值,而不是一次更新多个列。

我觉得有一种我只是想念的简单方法,欢迎提出任何想法/建议!

编辑以反射(reflect)下面的解决方案感谢您对索引的评论。但是,我对此有疑问,因为它与系列有关。如果我想以类似的方式更新单个系列,我可以这样做:

df.loc[df['Col1'].isnull(),['Col1']] = df['col1_v2']

print df

Col1 Col2 Col3 col1_v2 col2_v2 col3_v2
0 A B C NaN NaN NaN
1 D E F NaN NaN NaN
2 a NaN NaN a b d
3 d NaN NaN d e f

请注意,我没有考虑此处的索引,我过滤为 2x1 系列并将其设置为等于 4x1 系列,但它正确处理了它。想法?我试图更好地理解我已经使用了一段时间的功能,但我想没有完全掌握底层机制/规则

最佳答案

你想替换

print df.loc[df['Col1'].isnull(),['Col1','Col2', 'Col3']]

Col1 Col2 Col3
2 NaN NaN NaN
3 NaN NaN NaN

与:

replace_with_this = df.loc[df['Col1'].isnull(),['col1_v2','col2_v2', 'col3_v2']]
print replace_with_this

col1_v2 col2_v2 col3_v2
2 a b d
3 d e f

看起来很合理。但是,当您进行分配时,您需要考虑索引对齐,其中包括列。

所以,这应该可行:

df.loc[df['Col1'].isnull(),['Col1','Col2', 'Col3']] = replace_with_this.values

print df

Col1 Col2 Col3 col1_v2 col2_v2 col3_v2
0 A B C NaN NaN NaN
1 D E F NaN NaN NaN
2 a b d a b d
3 d e f d e f

我在最后使用 .values 来计算列。这从 replace_with_this 数据框中剥离了列信息,只使用了适当位置的值。

关于python - Pandas 一次更新多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37400246/

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