基于来自多个其他人的数据从一列汇总

时间:2017-09-15 07:21:30

标签: pandas dataframe

我正在尝试根据我在其他列上检查的输入的真值是否为真来对一列中的所有行求和。

这适用于基于两个参数的简单情况;但如果我想检查两个条件,我不能使用.loc,否则我不知道怎么做比较。

我想做什么:

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

我该怎么做呢?

1 个答案:

答案 0 :(得分: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

在此示例中,掩码中的可能总和为True,通过查找值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