次の形式の pandas DataFrame があります。
a b c
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
4 12 13 14
5 15 16 17
特定のアイテムのインデックス値に基づいて計算を実行する計算行を追加したいと考えています。たとえば、インデックス値が 2 未満のすべてのアイテムの値を合計する行を追加し、新しい行には「赤」のインデックス ラベルを付けます。最終的に、インデックス値をカテゴリにグループ化する 3 つの行を追加しようとしています。
- インデックス値が 2 未満のアイテム値の合計を含む行で、「赤」とラベル付けされています
- インデックス値が 1 < x < 4 である項目値の合計を含む行で、「青」とラベル付けされています
- インデックス値が 3 を超える項目値の合計を含む行で、「緑」のラベルが付けられています
理想的な出力は次のようになります。
a b c
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
4 12 13 14
5 15 16 17
Red 3 5 7
Blue 15 17 19
Green 27 29 31
私の現在の解決策は、データフレームを転置し、計算された列ごとにマップ関数を適用してから再転置することですが、パンダにはおそらく.append()
.
EDIT:私のエレガントなプリセットリストソリューション(もともと使用されていましたが、 and.transpose()
を使用して改善しました):.groupby()
.append()
df = pd.DataFrame(np.arange(18).reshape((6,3)),columns=['a', 'b', 'c'])
df['x'] = ['Red', 'Red', 'Blue', 'Blue', 'Green', 'Green']
df2 = df.groupby('x').sum()
df = df.append(df2)
del df['x']
私は、BrenBarn の回答の柔軟性を非常に好みます (以下を参照)。