结合/拼接pandas数据帧和条件

2024-10-04 03:28:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个pandas数据帧,AB
数据帧具有相同的索引和列,只是数据不同。 我有一个额外的数组X,它是索引的子集。在

我想要达到的目标: 得到的矩阵C也具有与AB相同的索引和列。对于它的数据,它从dataframeA获取行条目,如果索引在X中,则从B获取行条目。在

我原以为会有一种Python式的方法来实现这一点,但他们没有编译。例如,我用a的索引创建一个C数据帧,然后尝试如下操作:

C = C.apply(lambda i: A.ix[i.index] if i in X else B.ix[i.index])

我现在有一些东西可以用数学方法解决。因此,我基于X创建两个布尔数组,分别指定我想要从AB的条目。然后我用这些矩阵乘以AB然后做C=A+B。这似乎是一个很漫长的实现解决方案。我想要的是更简洁易读的东西。我目前的解决方案是:

^{pr2}$

Tags: 数据方法lambda目标pandasindexif条目
2条回答

做这样的事情:

C = A.copy()
C.update(B.iloc[X])

基本上,您需要一个数据帧的副本,并根据匹配的索引从另一个数据帧中更新记录。在

如果要将A的完整副本备份到C中,可以针对X对A和B进行分区:

^{pr2}$

考虑以下数据

B = pd.DataFrame(np.zeros((6, 6)), list('ABCDEF'), list('abcdef'))
A = pd.DataFrame(np.ones((6, 6)), B.index, B.columns)
x = ['A', 'D']

^{}获取第一个数据帧中的值并用第二个数据帧补充。但是在列表x上使用loc,我将A限制为我想要的行,并合并B的其余行。在

^{pr2}$

其他选择

A.query('index in @x').combine_first(B)

B.drop(x).append(A.loc[x]).reindex_like(A)

相关问题 更多 >