df1 为:
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
df2 为:
A B C D
1 A1 B4 C4 D4
2 A5 B5 C5 D5
3 A6 B6 C6 None
4 A7 B7 C7 D7
如果想要修改 df2 中第一行的值,使用:
df2.loc[df2['A']=='A1', ('B', 'C', 'D')] = df2.loc[df2['A']=='A5', ('B', 'C', 'D')]
,df2 会变为:
A B C D
1 A1 NaN NaN NaN
2 A5 B5 C5 D5
3 A6 B6 C6 None
4 A7 B7 C7 D7
第一行的值全部变为了空值,但是同样的句式,使用 df1 给 df2 的第一行赋值:df2.loc[df2['A']=='A1', ('B', 'C', 'D')] = df1.loc[df1['A']=='A1', ('B', 'C', 'D')]
,则可以成功赋值,df2 为:
A B C D
1 A1 B1 C1 D1
2 A5 B5 C5 D5
3 A6 B6 C6 None
4 A7 B7 C7 D7
另外,如果将第一个赋值语句改为:df2.loc[df2['A']=='A1', ('B', 'C', 'D')] = df2.loc[df2['A']=='A5', ('B', 'C', 'D')].values
,也是可以赋值成功的:
A B C D
1 A1 B5 C5 D5
2 A5 B5 C5 D5
3 A6 B6 C6 None
4 A7 B7 C7 D7
请教一下大神,为什么结果会这样?
你是不是测试有问题
df2.loc[df2['A'] == 'A1', ('B', 'C', 'D')] = df1.loc[df1['A'] == 'A1', ('B', 'C', 'D')]
不加 values 也是一样的情况。