python - 如何根据pandas中的多列快速选择数据框

标签 python pandas performance dataframe

我想要按多列值过滤行。

例如,给定以下数据帧,

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/

相关文章:

python - Python 3 中更快的 for 循环

python - 为什么我的程序在执行看似无限循环时会停止?

Python在RGB平均值中嵌套for循环

c++ - 在不使用自旋锁的情况下在空队列上暂停线程

pandas - cython 函数在 groupby 应用后返回单个单元格中的所有值

pandas - 从 Pandas groupBy 到 PySpark groupBy

r - 在 R 中跟踪时间序列数据表的变化

python - 抓取中间有 <br> 的表格(不出现)

python - 在 python 中只加载图像的一部分

python - 分隔行 python pandas