python - 在具有不同索引的两个数据帧上进行 Pandas 计算

标签 python pandas dataframe

有两个具有不同索引但具有匹配列的数据框,我如何计算它们之间的差异?

例如,用

df1 = pd.DataFrame({ 'a': (188, 750, 1330, 1385, 188, 750, 1330, 1385),
                    'b': (51.12, 51.45, 74.49, 29.21, 39.98, 3.98, 14.46, 16.51),
                    'c': pd.Categorical(['R', 'R', 'R', 'R', 'F', 'F', 'F', 'F']) })
df1 = df1.set_index(['a'])

          b  c
a             
188   51.12  R
750   51.45  R
1330  74.49  R
1385  29.21  R
188   39.98  F
750    3.98  F
1330  14.46  F
1385  16.51  F


df2 = pd.DataFrame({ 'x': (20, 50),
                     'c': pd.Categorical(['R', 'F']) })
df2 = df2.set_index(['c'])

    x
c    
R  20
F  50

我想根据 df1b 列与 df2 中的 x 的区别df1 中的列 c 应与 df2 上的索引 c 匹配。

结果会是这样的:

          b  c   diff
a                    
188   51.12  R  31.12
750   51.45  R  31.45
1330  74.49  R  54.49
1385  29.21  R   9.21
188   39.98  F -10.02
750    3.98  F -46.02
1330  14.46  F -35.54
1385  16.51  F -33.49

最佳答案

您可以使用 joinmap :

df1['diff'] = df1['b'] - df1.join(df2, on='c')['x']
print (df1)
          b  c   diff
a                    
188   51.12  R  31.12
750   51.45  R  31.45
1330  74.49  R  54.49
1385  29.21  R   9.21
188   39.98  F -10.02
750    3.98  F -46.02
1330  14.46  F -35.54
1385  16.51  F -33.49

或者:

df1['diff'] = df1['b'] - df1['c'].map(df2['x'])
print (df1)
          b  c   diff
a                    
188   51.12  R  31.12
750   51.45  R  31.45
1330  74.49  R  54.49
1385  29.21  R   9.21
188   39.98  F -10.02
750    3.98  F -46.02
1330  14.46  F -35.54
1385  16.51  F -33.49

关于python - 在具有不同索引的两个数据帧上进行 Pandas 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44502010/

相关文章:

python - 在两侧创建多个 y 轴

python - 为什么多行字符串在打印或写入时会发生变化? (Windows 上的 Python 3.6)

python - 将位串转换为字节(霍夫曼编码)

python - 将 Celery 用于管道

python - Pandas/Python 过滤 DF 的列值

python - 在 pandas 或 matplotlib 的一张图中绘制多个箱线图?

python - 根据条件转换 Pandas 数据框列

r - 计算另一个数据框中每个条件的行数

python - 使用 sklearn 缩放的 pandas 数据框列

python - 如何在Python中匹配来自不同DataFrame的相同列的字段?