2017-09-15 50 views
1

我想从一列中总结所有行,如果真值到我在其他列检查的输入是真实的。从一个列基于来自多个其他人的数据求和

这在基于两个参数的简单情况下工作;但是如果我想检查两个条件,则不能使用.loc,否则我不知道如何进行比较。

我所试图做的事:

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

我怎么会去这样做呢?

回答

1

使用boolean indexing过滤和loc的选择列:

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 n这个样本是posssible总和True S IN面具,多通过寻找价值3

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

我怎么可能会做同样类型的比较,如果数据1是一个字符串? – Whatamia

+0

我添加样本以获得更好的解释。 – jezrael