Python 使用多个变量/输入查询数据帧列
我遇到了一种情况,我需要通过以下列P1-P5中的输入过滤数据帧。可以有1到5个输入,它们可以位于P1-P5的任何位置Python 使用多个变量/输入查询数据帧列,python,pandas,Python,Pandas,我遇到了一种情况,我需要通过以下列P1-P5中的输入过滤数据帧。可以有1到5个输入,它们可以位于P1-P5的任何位置 TeamAbb P1 P2 P3 P4 P5 0 ATL1 203953 1627745 1629027 1629629 1629631 1 ATL2 203953 1627745 1627761 1629027 1629631 2 ATL3 203458 203953 1627761 1
TeamAbb P1 P2 P3 P4 P5
0 ATL1 203953 1627745 1629027 1629629 1629631
1 ATL2 203953 1627745 1627761 1629027 1629631
2 ATL3 203458 203953 1627761 1629027 1629631
3 ATL4 203458 203953 1629027 1629629 1629631
4 ATL5 203458 1628381 1629027 1629629 1629631
5 ATL6 203953 1628981 1628989 1629027 1629631
6 ATL7 203953 1627745 1628989 1629027 1629631
7 ATL8 1713 202323 203459 1627761 1628981
8 ATL9 1713 203459 1628981 1629027 1629631
例1
input_val = [1713]
TeamAbb P1 P2 P3 P4 P5
7 ATL8 1713 202323 203459 1627761 1628981
8 ATL9 1713 203459 1628981 1629027 1629631
例2
input_val = [1713,202323]
TeamAbb P1 P2 P3 P4 P5
7 ATL8 1713 202323 203459 1627761 1628981
到目前为止,我尝试过的每种方法都不起作用(查询、应用/任何和掩码)。如果有人对如何处理这个问题有想法,我会非常感激 您可以
求和
列表中每个值的所有布尔数据帧,然后在轴=1上求和得到的数据帧,然后检查它是否与输入列表的长度相同:
input_val = [1713,202323]
mask = sum([df.eq(i) for i in input_val]).sum(1).eq(len(input_val))
print (df[mask])
TeamAbb P1 P2 P3 P4 P5
7 ATL8 1713 202323 203459 1627761 1628981
我将跨行使用apply,并检查输入集和行集的差异:
input_val = [1713,202323]
df_filter = (
df[['P{}'.format(i) for i in range(1,6)]]
.apply(lambda row: len(set(input_val) - set(row)) == 0 # check that all input vals are found somewhere in the row
, axis=1)
)
df_new = df[df_filter] # apply the filter
我认为这会达到你想要的结果:
ee = df
ee = e.isin([1713])
ee ['match'] = ee[ee>0].count(axis=1)
df.loc[ee['match']==ee['match'].max()]
输出:
TeamAbb P1 P2 P3 P4 P5
7 ATL8 1713 202323 203459 1627761 1628981
8 ATL9 1713 203459 1628981 1629027 1629631
TeamAbb P1 P2 P3 P4 P5
7 ATL8 1713 202323 203459 1627761 1628981
输入:
ee = df
ee = e.isin([1713, 202323])
ee ['match'] = ee[ee>0].count(axis=1)
df.loc[ee['match']==ee['match'].max()]
输出:
TeamAbb P1 P2 P3 P4 P5
7 ATL8 1713 202323 203459 1627761 1628981
8 ATL9 1713 203459 1628981 1629027 1629631
TeamAbb P1 P2 P3 P4 P5
7 ATL8 1713 202323 203459 1627761 1628981
输入
输出
TeamAbb P1 P2 P3 P4 P5
5 ATL6 203953 1628981 1628989 1629027 1629631
6 ATL7 203953 1627745 1628989 1629027 1629631
哦,是的,我知道,我只是快速浏览了一下例子。谢谢你的帮助。