首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pandas -在具有列条件的数据帧之间交换行

问pandas -在具有列条件的数据帧之间交换行
EN

Stack Overflow用户
提问于 2021-08-27 14:58:57
回答 1查看 66关注 0票数 1

我尝试将列x具有特定值的df1中的整行与df2中x列具有特定值的整行进行交换。打印df1我把NaN放在我想交换的这一行。对此有合理的解释吗?我可以基于列中的特定值进行这样的交换吗?任何帮助都非常受欢迎。

代码语言:javascript
复制
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]
EN

回答 1

Stack Overflow用户

发布于 2021-08-27 15:03:24

pandas具有对齐索引的数据完整性机制,这意味着值尝试基于索引位置对齐,其中右侧的df2[df2["x"]==323212]来自索引1,因此它尝试转到左侧的索引1。但是左边没有索引1,只有索引0。因此,数据被认为是丢失的( pandas表示为NaN)。

产生未索引集合的操作,如values或to_numpy(),可以用来打破这种对齐:

代码语言:javascript
复制
df1[df1["x"] == 1] = df2[df2["x"] == 323212].values

df1

代码语言:javascript
复制
        x   y
0  323212  54
1       2   4
2       3   5

这可能会让人感到困惑,就像这样:

代码语言:javascript
复制
df1[df1["x"] == 2] = df2[df2["x"] == 323212]

由于索引恰好正确对齐(两个索引均为1),因此工作正常:

df1

代码语言:javascript
复制
        x   y
0       1   3
1  323212  54
2       3   5

大概是这样的:

代码语言:javascript
复制
df1[df1['x'].isin([1, 3])] = df2[df2["x"].isin([3223, 323212])]

似乎只有部分工作:

df1

代码语言:javascript
复制
        x        y
0  3223.0  41233.0
1     2.0      4.0
2     NaN      NaN

但是,所有情况都是这种索引对齐的结果,将值放置在基于索引的“正确”位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68955568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档