2

これを行うためのきちんとした方法があると確信していますが、まだ見つけられていません。

データフレームがあるとします:

f = pd.DataFrame({'A':[1, 2, 3, 4], 'B': [10, 20, 30, 40], 'C':[100, 200, 300, 400]}).T

つまり、A、B、および C のインデックスが付けられた行があります。

ここで、行 A と B を取り、それらの両方を合計である 1 つの行に置き換えたいとします。さらに、特定のインデックス (「合計」など) をその置換行に割り当てたい (インデックスの順序は重要ではないことに注意してください)。

現時点では、私はしなければならない:

f.append(pd.DataFrame(f.ix[['A','B']].sum()).T).drop(['A','B'])

続いて、置換行のインデックスを設定するための同様に不格好なものが続きます。ただし、これらの両方の手順を実行するエレガントな 1 行の方法があるかどうか知りたいです。

4

2 に答える 2

1

もう 1 つのオプションは、concatを使用することです。

In [11]: AB = list('AB')

まず、合計する行を選択します。

In [12]: f.loc[AB]
Out[12]: 
    0   1   2   3
A   1   2   3   4
B  10  20  30  40

In [13]: f.loc[AB].sum()
Out[13]: 
0    11
1    22
2    33
3    44
dtype: int64

および DataFrame の行として(注: この手順は、将来のバージョンでは不要になる可能性があります...) :

In [14]: pd.DataFrame({'sumAB': f.loc[AB].sum()}).T
Out[14]: 
        0   1   2   3
sumAB  11  22  33  44

残りのすべての行を連結します。

In [15]: f.loc[f.index - AB]
Out[15]: 
     0    1    2    3
C  100  200  300  400

In [16]: pd.concat([pd.DataFrame({'sumAB': f.loc[AB].sum()}).T,
                        f.loc[f.index - AB]],
                   axis=0)
Out[16]: 
         0    1    2    3
sumAB   11   22   33   44
C      100  200  300  400
于 2013-09-05T21:03:04.403 に答える