web-dev-qa-db-ja.com

Python Pandasを使用して、ワイルドカード名検索ですべての列を合計します

python pandasに、CSVファイルからいくつかの列を取得したデータフレームがあります。

たとえば、data =:

Day P1S1 P1S2 P1S3 P2S1 P2S2 P2S3
1   1    2    2    3    1    2
2   2    2    3    5    4    2

そして、必要なのは、名前がP1で始まるすべての列の合計を取得することです...ワイルドカードを使用したP1 *のようなものです。

エラーが発生する次のようなもの:

P1Sum = data ["P1 *"]

パンダでこれを行う理由はありますか?

36
jbssm

私は答えを見つけました。

データを使用して、質問からのデータフレーム:

from pandas import *

P1Channels = data.filter(regex="P1")
P1Sum = P1Channels.sum(axis=1)
54
jbssm

列のリスト内包表記により、if条件でより多くのフィルターを使用できます。

In [1]: df = pd.DataFrame(np.arange(15).reshape(5, 3), columns=['P1S1', 'P1S2', 'P2S1'])

In [2]: df
Out[2]: 
   P1S1  P1S2  P2S1
0     0     1     2
1     3     4     5
2     6     7     8
3     9    10    11
4    12    13    14

In [3]: df.loc[:, [x for x in df.columns if x.startswith('P1')]].sum(axis=1)
Out[3]: 
0     1
1     7
2    13
3    19
4    25
dtype: int64
3
Anton Tarasenko

ヒントjbssmをありがとう、合計を探している他の人のために、私は最後に.sum()を追加することになりました。

P1Sum= P1Channels.sum(axis=1).sum()
1
jarvis