2017-09-15 4 views
1

他の列をチェックしている入力に対する真理値が真であるかどうかに基づいて、ある列からすべての行を合計しようとしています。複数のデータから1つの列を集計する

これは、2つのパラメータに基づく単純なケースで機能します。 2つの条件を確認したい場合は.locを使用できません。そうでない場合は比較方法を知りません。

私が行うには何をしようとしています:

findMe = df.loc[df["Column1"] == "data1" and df["column2"] == "data2], then, 
column1.sum() 

は、どのように私はこれをやって行くのでしょうか?

答えて

1

フィルタリングおよび列選択のためのlocに使用boolean indexing

df.loc[(df["Column1"] == "data1") & (df["Column2"] == "data2"), 'Column1'].sum() 

やフィルタリングのためのqueryを使用します。

df.query("Column1 == 'data1' & Column2 == 'data2'")['Column1'].sum() 

しかしdata1が数値である必要があり、それ以外の文字列値が連結されています

df = pd.DataFrame({'Column1':[1,3,3], 
        'Column2':['data1','data2', 'data2']}) 
print (df) 
    Column1 Column2 
0  1 data1 
1  3 data2 
2  3 

print (df.loc[(df["Column1"] == 3) & (df["Column2"] == "data2"), 'Column1']) 
1 3 
2 3 
Name: Column1, dtype: int64 

a = df.loc[(df["Column1"] == 3) & (df["Column2"] == "data2"), 'Column1'].sum() 
print (a) 
6 
b = df.query("Column1 == 3 & Column2 == 'data2'")['Column1'].sum() 
print (b) 
6 

I DATA1が文字列であれば、私は比較の同じ種類を行う可能性がありますどのように

a = ((df["Column1"] == 3) & (df["Column2"] == "data2")).sum() * 3 
print (a) 
6 

df = pd.DataFrame({'Column1':['data2','data1', 'data1'], 
        'Column2':['data1','data2', 'data2']}) 
print (df) 
    Column1 Column2 
0 data2 data1 
1 data1 data2 
2 data1 data2 

c = df.loc[(df["Column1"] == "data1") & (df["Column2"] == "data2"), 'Column1'].sum() 
print (c) 
data1data1 
+0

:nは、このサンプルでは、​​値3を見つけることによってマスクと複数でTrueのposssible合計ですか? – Whatamia

+0

サンプルを追加して説明を追加します。 – jezrael

関連する問題