【发布时间】:2018-09-07 11:25:18
【问题描述】:
我有 2 个 Pandas dfs,A 和 B,有一些匹配的列,但行数不同。 我想根据某些条件将匹配列的值从 B 复制到 A。我试过这个:
s1 = pd.Series([5, 1, 'a'])
s2 = pd.Series([6, 2, 'b'])
s3 = pd.Series([7, 3, 'd'])
s4 = pd.Series([8, 4, 'e'])
s5 = pd.Series([9, 5, 'f'])
df1 = pd.DataFrame([list(s1), list(s2),list(s3),list(s4),list(s5)], columns = ["A", "B", "C"])
s1 = pd.Series([5, 6, 'p'])
s2 = pd.Series([6, 7, 'q'])
s3 = pd.Series([7, 8, 'r'])
s4 = pd.Series([8, 9, 's'])
s5 = pd.Series([9, 10, 't'])
df2 = pd.DataFrame([list(s1), list(s2),list(s3),list(s4),list(s5)], columns = ["A", "B", "C"])
df1.loc[df1.A.isin(df2.A), ['B', 'C']] = df2[['B', 'C']]
print (df1)
A B C
0 5 6 p
1 6 7 q
2 7 8 r
3 8 9 s
4 9 10 t
这在行数相同时有效,但如果 B 的行数较少,则索引未对齐,我在最终的 df 中得到 NaN。例如,df2 的行数少了,行索引没有对齐
df2 = pd.DataFrame([list(s1), list(s2),list(s4),list(s5)], columns = ["A", "B", "C"])
df1.loc[df1.A.isin(df2.A), ['B', 'C']] = df2[['B', 'C']]
print (df1)
A B C
0 5 6.0 p
1 6 7.0 q
2 7 8.0 r
3 8 10.0 t
4 9 NaN NaN
如果 A 列中的值相同,如何执行此操作并复制该值?
【问题讨论】:
标签: pandas