我想要按多列值过滤行。
例如,给定以下数据帧,
import pandas as pd
df = pd.DataFrame({"name":["Amy", "Amy", "Amy", "Bob", "Bob",],
"group":[1, 1, 1, 1, 2],
"place":['a', 'a', "a", 'b', 'b'],
"y":[1, 2, 3, 1, 2]
})
print(df)
原始数据框:
name group place y
0 Amy 1 a 1
1 Amy 1 a 2
2 Amy 1 a 3
3 Bob 1 b 1
4 Bob 2 b 2
我想选择满足 selectRow
中的列组合 [name
, group
, place
] 的样本>。
selectRow = [["艾米", 1, "a"], ["艾米", 2, "b"]]
那么预期的数据帧
是:
name group place y
0 Amy 1 a 1
1 Amy 1 a 2
2 Amy 1 a 3
我已经尝试过了,我的方法效率不高并且运行时间很长,特别是当原始数据框中有很多样本时。
我的简单方法:
newdf = pd.DataFrame({})
for item in (selectRow):
print(item)
tmp = df.loc[(df['name'] == item[0]) & (df['group'] == item[1]) & (df['place'] == item[2])]
newdf = newdf.append(tmp)
newdf = newdf.reset_index( drop = True)
newdf.tail()
print(newdf)
希望有一种有效的方法来实现它。
最佳答案
尝试使用isin
:
print(df[df['name'].isin(list(zip(*selectRow))[0]) & df['group'].isin(list(zip(*selectRow))[1]) & df['place'].isin(list(zip(*selectRow))[2])])
关于python - 如何根据pandas中的多列快速选择数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58830008/