【发布时间】:2017-05-27 02:21:43
【问题描述】:
我有两个 pandas 数据框,A 和 B。
数据框具有相同的索引和列,只是不同的数据。
我有一个额外的数组 X,它是索引的子集。
我想要实现的目标: 生成的矩阵 C 也具有与 A 和 B 相同的索引和列。对于其数据,如果索引在 X 中,则从数据帧 A 获取行条目,否则从 B 获取行条目。
我认为会有一种 Python 的方式来实现这一点,但它们无法编译。例如,我使用 A 的索引创建了一个 C 数据框,然后尝试了以下操作:
C = C.apply(lambda i: A.ix[i.index] if i in X else B.ix[i.index])
我现在有一些工作,我基本上用数学方法解决它。因此,我创建了两个基于 X 的布尔数组,以分别指定我想要的 A 和 B 中的哪些条目。然后我将 A 和 B 乘以这些矩阵,然后执行 C = A + B强>。实现解决方案似乎很冗长。我追求的是更短、更易读的东西。我目前的解决方案如下:
def testIn(row):
return [x in X for x in row.index]
def testOut(row):
return [x not in X for x in row.index]
AMAP = C.apply(testIn, axis=0)
BMAP = C.apply(testOut, axis=0)
ANEW = pandas.DataFrame(AMAP*A)
BNEW = pandas.DataFrame(BMAP*B)
C = ANEW + BNEW
【问题讨论】:
标签: python pandas dataframe merge conditional