我需要将数据帧中的一些列作为一个整体进行比较,例如:

df = pd.DataFrame({'A':[1,1,3],'B':[4,5,6]})

#Select condition: If df['A'] == 1 and df['B'] == 4, then pick up this row.

对于这个简单的例子,我可以使用以下方法:
df.loc[(df['A']==1)&(df['B']==4),'A':'B']

然而,实际上,我的数据帧有几十列,应该作为一个整体进行比较。以上的解决方案将非常混乱,如果我选择列出所有这些。所以我认为,如果把它们作为一个整体与一个列表进行比较,也许可以解决这个问题:
#something just like this:
df.loc[df.loc[:,'A':'B']==[1,4],'A':'B')]

没用。所以我想出了一个主意,首先将所有需要的列组合成一个新列作为列表值,然后将这个新列与列表进行比较。后者在Pandas: compare list objects in Series
虽然我已经解决了我的案子,但我还是想知道是否有更简单的方法来解决这个问题?谢谢。

最佳答案

您可以通过数据的NumPy数组表示使用布尔掩码:

df = pd.DataFrame({'A':[1,1,3],'B':[4,5,6]})

res = df[(df.loc[:, 'A':'B'].values == [1, 4]).all(1)]

print(res)

   A  B
0  1  4

在这种情况下,永远不要将列组合成一系列的列表。这是低效的,因为您将失去所有矢量化的好处,此后的任何处理都将涉及Python级别的循环。

关于python - Pandas :如何将多个单元格与列表/元组进行比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53115592/

10-12 16:59