首先,让我做个铺垫。
我从一个pandas
dataframe开始klmn
,它看起来像这样:
In [15]: klmn
Out[15]:
K L M N
0 0 a -1.374201 35
1 0 b 1.415697 29
2 0 a 0.233841 18
3 0 b 1.550599 30
4 0 a -0.178370 63
5 0 b -1.235956 42
6 0 a 0.088046 2
7 0 b 0.074238 84
8 1 a 0.469924 44
9 1 b 1.231064 68
10 2 a -0.979462 73
11 2 b 0.322454 97
接下来,我根据“K”列中的值拆分klmn
为两个数据框,klmn0
并且klmn1
:
In [16]: k0 = klmn.groupby(klmn['K'] == 0)
In [17]: klmn0, klmn1 = [klmn.ix[k0.indices[tf]] for tf in (True, False)]
In [18]: klmn0, klmn1
Out[18]:
( K L M N
0 0 a -1.374201 35
1 0 b 1.415697 29
2 0 a 0.233841 18
3 0 b 1.550599 30
4 0 a -0.178370 63
5 0 b -1.235956 42
6 0 a 0.088046 2
7 0 b 0.074238 84,
K L M N
8 1 a 0.469924 44
9 1 b 1.231064 68
10 2 a -0.979462 73
11 2 b 0.322454 97)
最后,我计算 中列的平均值,按M
列中klmn0
的值分组L
:
In [19]: m0 = klmn0.groupby('L')['M'].mean(); m0
Out[19]:
L
a -0.307671
b 0.451144
Name: M
现在,我的问题是,如何m0
从子数据框的M
列中减去,尊重列中的值?klmn1
L
(我的意思是从列中的每一行的列中m0['a']
减去,对于.)M
klmn1
'a'
L
m0['b']
可以想象以一种将M
列中的值替换klmn1
为新值(在从 中减去值之后m0
)的方式来执行此操作。或者,可以想象以一种klmn1
保持不变的方式执行此操作,而是生成一个klmn11
带有更新M
列的新数据框。 我对这两种方法都感兴趣。