6

まず、ステージを設定させてください。

次のようなpandasdataframeから始めます。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」列の値に従って、klmn2 つのデータフレームに分割します。klmn0klmn1

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列の平均を計算します。klmn0L

In [19]: m0 = klmn0.groupby('L')['M'].mean(); m0
Out[19]: 
L
a   -0.307671
b    0.451144
Name: M

さて、私の質問は、列の値を考慮して、サブデータフレームの列からどのように減算できますか? m0Mklmn1L (これは、列に含まれる各行の列から が減算されることを意味し、同様m0['a']に. )Mklmn1'a'Lm0['b']

Mの列の値を新しい値に置き換える方法でこれを行うことを想像できklmn1ます (から値を引いた後m0)。または、これを変更せずにそのままにして、代わりに更新された列を持つklmn1新しいデータフレームを生成することを想像することもできます。 私は両方のアプローチに興味があります。klmn11M

4

2 に答える 2

6

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
于 2013-02-18T22:57:15.810 に答える
5

オプション1:

df1.subtract(df2, fill_value=0) 

オプション #2:

df1.subtract(df2, fill_value=None) 
于 2016-12-30T21:14:41.313 に答える