我尝试将列x具有特定值的df1中的整行与df2中x列具有特定值的整行进行交换。打印df1我把NaN放在我想交换的这一行。对此有合理的解释吗?我可以基于列中的特定值进行这样的交换吗?任何帮助都非常受欢迎。
import pandas as pd
df1 = pd.DataFrame({'x': [1, 2, 3], 'y': [3, 4, 5]})
df2 = pd.DataFrame({'x': [3223, 323212, 13242], 'y': [41233, 54, 5532]})
df1[df1["x"]==1] = df2[df2["x"]==323212]
df1 #contains NaN and not the values from df2[df2["x"]==323212]发布于 2021-08-27 15:03:24
pandas具有对齐索引的数据完整性机制,这意味着值尝试基于索引位置对齐,其中右侧的df2[df2["x"]==323212]来自索引1,因此它尝试转到左侧的索引1。但是左边没有索引1,只有索引0。因此,数据被认为是丢失的( pandas表示为NaN)。
产生未索引集合的操作,如values或to_numpy(),可以用来打破这种对齐:
df1[df1["x"] == 1] = df2[df2["x"] == 323212].valuesdf1
x y
0 323212 54
1 2 4
2 3 5这可能会让人感到困惑,就像这样:
df1[df1["x"] == 2] = df2[df2["x"] == 323212]由于索引恰好正确对齐(两个索引均为1),因此工作正常:
df1
x y
0 1 3
1 323212 54
2 3 5大概是这样的:
df1[df1['x'].isin([1, 3])] = df2[df2["x"].isin([3223, 323212])]似乎只有部分工作:
df1
x y
0 3223.0 41233.0
1 2.0 4.0
2 NaN NaN但是,所有情况都是这种索引对齐的结果,将值放置在基于索引的“正确”位置。
https://stackoverflow.com/questions/68955568
复制相似问题