Python 当索引不完全匹配时,是否有更惯用/更短的方法对Pandas对象执行操作?

Python 当索引不完全匹配时,是否有更惯用/更短的方法对Pandas对象执行操作?,python,pandas,Python,Pandas,我有列和索引不匹配的序列和数据帧。为了给它们做手术,我用了 pd.DataFrame(df1.values + df2.values * s1.values, index = s1.index, columns = df1.columns) 维度遵循NumPy广播规则和上述工作。我正在寻找一个更好的方法来实现上述目标,这将是内存效率和速度 注意:索引和列继承自Pandas对象的 有时索引来自同一对象: pd.DataFrame(df1.values + df2.values * s1.valu

我有列和索引不匹配的序列和数据帧。为了给它们做手术,我用了

pd.DataFrame(df1.values + df2.values * s1.values, index = s1.index, columns = df1.columns)
维度遵循NumPy广播规则和上述工作。我正在寻找一个更好的方法来实现上述目标,这将是内存效率和速度

注意:索引和列继承自Pandas对象的

有时索引来自同一对象:

pd.DataFrame(df1.values + df2.values * s1.values, index = df1.index, columns = df1.columns)

样本数据:

import pandas as pd

df1 = pd.DataFrame([[1, 2, 3, 4], [3, 4, 5, 6], [5, 6, 7, 8], [7, 8, 9, 10]], index=[1, 2, 3, 4], columns=['A', 'B', 'C', 'D'])

df2 = pd.DataFrame([[10, 9, 8, 7], [8, 7, 6, 5], [6, 5, 4, 3], [4, 3, 2, 1]], index=['R1', 'R2', 'R3', 'R4'], columns=['C1', 'C2', 'C3', 'C4'])

res1 = pd.DataFrame(df1.values + df2.values, index = df1.index, columns = df1.columns)

res2 = pd.DataFrame(df1.values + df2.values, index = df1.index, columns = df2.columns)

s1 = pd.Series([1, 2, 3, 4], index=['I1', 'I2', 'I3', 'I4'])

res3 = pd.DataFrame(df1.values + df2.values * s1.values, index = s1.index, columns = df2.columns)

res4 = pd.DataFrame(df1.values + df2.values * s1.values, index = df1.index, columns = df1.columns)
预期结果:

>>> res1
    A   B   C   D
1  11  11  11  11
2  11  11  11  11
3  11  11  11  11
4  11  11  11  11
>>> res2
   C1  C2  C3  C4
1  11  11  11  11
2  11  11  11  11
3  11  11  11  11
4  11  11  11  11
>>> res3
    C1  C2  C3  C4
I1  11  20  27  32
I2  11  18  23  26
I3  11  16  19  20
I4  11  14  15  14
>>> res4
    A   B   C   D
1  11  20  27  32
2  11  18  23  26
3  11  16  19  20
4  11  14  15  14
使用较短表达式时出现不希望出现的结果:

df1 + df2
     A   B   C  C1  C2  C3  C4   D
1  NaN NaN NaN NaN NaN NaN NaN NaN
2  NaN NaN NaN NaN NaN NaN NaN NaN
3  NaN NaN NaN NaN NaN NaN NaN NaN
4  NaN NaN NaN NaN NaN NaN NaN NaN
R1 NaN NaN NaN NaN NaN NaN NaN NaN
R2 NaN NaN NaN NaN NaN NaN NaN NaN
R3 NaN NaN NaN NaN NaN NaN NaN NaN
R4 NaN NaN NaN NaN NaN NaN NaN NaN

df1 + df2 * s1
     A   B   C  C1  C2  C3  C4   D  I1  I2  I3  I4
1  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
R1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
R2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
R3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
R4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

请提供一个小但可重复的数据集和所需的数据集。请阅读并相应地编辑您的问题。为什么您对当前的工作方式不满意?我想知道是否有一种方法可以使用pandas DataFrame进行元素操作,其中索引取自其中一个DataFrame,或者有一种方法可以缩短表达式,如
res4=pd.DataFrame(df1.values+df2.values*s1.values,index=df1.index,columns=df1.columns)
。这很长,公式在锅炉板中丢失。当有多个公式和更长的表达式时,就不清楚公式是什么,并且不适合一行。您的方法应该很快。如果要清理代码,请指定较短的变量名