Python 两个不同索引的数据帧的pandas计算
有两个索引不同但列匹配的数据帧,如何计算它们之间的差异 例如,与Python 两个不同索引的数据帧的pandas计算,python,pandas,dataframe,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
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
我想根据df1
中的c
列应与df2
上的索引c
匹配的条件,将df1
中的b
列与df2
中的x
列进行比较
结果是:
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
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
您可以使用或:
或:
输出:
这些方法是否也适用于系列,例如,如果df2是系列而不是数据帧。将一个系列转换成一个数据帧并提供一个列名是很容易的,但是我想进一步澄清一下,是的,这很容易。每列都是
系列
,因此例如df2['x']
是系列
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
df1.assign(diff = df1['b'] - df1['c'].map(df2.squeeze()))
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.apply(lambda x: x.b - df2.loc[x.c].values[0],axis=1)