我正在尝试根据我在其他列上检查的输入的真值是否为真来对一列中的所有行求和。
这适用于基于两个参数的简单情况;但如果我想检查两个条件,我不能使用.loc,否则我不知道怎么做比较。
我想做什么:
findMe = df.loc[df["Column1"] == "data1" and df["column2"] == "data2], then,
column1.sum()
我该怎么做呢?
答案 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