2017-08-10 9 views
2

1から52までの支柱があります 最初の26と最後の26を別々に合計します。パンダ - 1-Nの列の列を並べ替え

私は次があります。

column_names = [x for x in df.columns.values.tolist() 
       if x.startswith("spend_") 
       ] 

これは私がに興味があるすべての列を与える

[ 'spend_1'、 'spend_2'、 'spend_3'、 「spend_4。次のように」、 'spend_5' ...]

私は、それらをまとめることができます。

df['pre_spend'] = df[column_names].sum(axis=1) 

これは私にすべて52週間を与えます。

1_26と27_52を別々に選択する簡単な方法はありますか?

私はこれをやっています: pre_spend =合計(of spend_1-spend_26);

+0

サンプルデータセットを作成できますか? – Travis

+0

[列のスライス](http://pandas.pydata.org/pandas-docs/stable/dsintro.html#indexing-selection)を使用してその一部を合計することができます。この[Pandas From The Ground Up](http://pandas.pydata.org/talks.html#pycon-us-2015)の話を見るのには時間がかかるでしょう。 – wwii

答えて

2

私はあなたがラベルで選択した列のDataFrame.locが必要だと思う:

a = df.loc[:, 'spend_1':'spend_26'].sum(axis=1) 

b = df.loc[:, 'spend_27':'spend_52'].sum(axis=1) 

サンプル:

np.random.seed(100) 
df = pd.DataFrame(np.random.randint(10, size=(5,6))).add_prefix('spend_') 
print (df) 
    spend_0 spend_1 spend_2 spend_3 spend_4 spend_5 
0  8  8  3  7  7  0 
1  4  2  5  2  2  2 
2  1  0  8  4  0  9 
3  6  2  4  1  5  3 
4  4  4  3  7  1  1 

print (df.loc[:, 'spend_0':'spend_2']) 
    spend_0 spend_1 spend_2 
0  8  8  3 
1  4  2  5 
2  1  0  8 
3  6  2  4 
4  4  4  3 

a = df.loc[:, 'spend_0':'spend_2'].sum(axis=1) 
print (a) 
0 19 
1 11 
2  9 
3 12 
4 11 
dtype: int64 

print (df.loc[:, 'spend_3':'spend_5']) 
    spend_3 spend_4 spend_5 
0  7  7  0 
1  2  2  2 
2  4  0  9 
3  1  5  3 
4  7  1  1 

b = df.loc[:, 'spend_3':'spend_5'].sum(axis=1) 
print (b) 
0 14 
1  6 
2 13 
3  9 
4  9 
dtype: int64 
0

おかげでJezraelは私がになったのだどこよりもはるかに優れて動作します:

column_names = [x for x in df.columns.values.tolist() 
       if x.startswith("spend_") 
       ] 

pre = df.loc[:,column_names[:26]] 
pre = pre.sum(axis=1) 
post = df.loc[:,column_names[26:]] 
post = post.sum(axis=1)