2015-11-03 75 views
0

如果在數據框的特定列中共享相同的值,我是否要聚合某些列中的值?如何根據Python中的列值聚合某些行

換句話說,我怎麼能從A獲取數據幀B?在這個例子中,我想根據列c1中的值進行檢查,如果存在具有相同值的行,那麼我想將列c3-c5的總和放在行中新列(c6)中的值爲「 c「列c2。

答:

c0 c1 c2 c3 c4 c5 
0 1 a d 3 4 0 
1 1 a c 0 0 6 
2 1 b d 3 1 0 
1 1 b c 0 0 1 

B:

c0 c1 c2 c3 c4 c5 c6 
0 1 a d 3 4 0 
1 1 a c 0 0 6 13 
2 1 b d 3 1 0 
1 1 b c 0 0 1 5 

這裏是我做了什麼:

import pandas as pd 
import numpy as np 
A = pd.read_excel(file_location) 
A['c6'] = pd.Series(0, index=A.index) 
A.c6[A['c2'] == 'c'] = A.c5 + A.c4[A.c1 == A.c1.shift(-1)] + A.c3[A.c1 == A.c1.shift(-1)] 
B = A 
+0

你需要你的數據看起來像B'如果你想要的是某些列的某些列的值,那麼具有分組列值和總計列的數據框就足夠了嗎? – James

+0

@詹姆斯是我想讓它看起來像B. – Ana

回答

0
import pandas as pd 
import io 
import numpy as np 
import datetime 

data = """ 
    c0 c1 c2 c3 c4 c5 
0 1 a d 3 4 0 
1 1 a c 0 0 6 
2 1 b d 3 1 0 
1 1 b c 0 0 1 
    """ 

df = pd.read_csv(io.StringIO(data), delimiter='\s+') 

df2 = pd.DataFrame(df.groupby('c1').sum().ix[:,1:].sum(axis=1), columns=['c6']).reset_index() 

df3 = pd.merge(df,df2,on='c1').set_index(df.index) 

print(df3) 

這將使:

c0 c1 c2 c3 c4 c5 c6 
0 1 a d 3 4 0 13 
1 1 a c 0 0 6 13 
2 1 b d 3 1 0 5 
1 1 b c 0 0 1 5 
+0

感謝問題解決! :)我添加了這一行,以便我在c6中獲得值爲0的列,其列c'中的值爲'd':df3.c6 [df3 ['c2'] =='d'] = 0' – Ana

+0

很高興它出來了。我不確定預期輸出中空白數據背後的推理是什麼,但現在我看到了。 – Leb