首先,让我来摆好舞台。
我从一个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现在,我的问题是,如何从<代码>D35列中的klmn1列中从d34m0 >列中减去 M ? L 列中的值?E 232(我的意思是,m0['a']从klmn1中每一行的M列中减去,D36在L列中也是如此。)
可以想象,这样做的方式是将M列中的klmn1列中的值替换为新值(在从m0中减去值之后)。或者,您可以想象这样做的方式可以使klmn1保持不变,而是生成一个新的带有更新的M列的dataframe klmn11。我对这两种方法都感兴趣。
发布于 2013-02-18 22:57:15
如果将klmn1数据的索引重置为L列的索引,则数据将自动将索引与从中减去的任何序列对齐:
In [1]: klmn1.set_index('L')['M'] - m0
Out[1]:
L
a 0.777595
a -0.671791
b 0.779920
b -0.128690
Name: M发布于 2016-12-30 21:14:41
备选案文1:
df1.subtract(df2, fill_value=0) 备选案文2:
df1.subtract(df2, fill_value=None) https://stackoverflow.com/questions/14946494
复制相似问题