将list元素与dataframe元素python匹配
我有一些清单如下:将list元素与dataframe元素python匹配,python,regex,pandas,list,dataframe,Python,Regex,Pandas,List,Dataframe,我有一些清单如下: l1 = ['Category=worker,manager','Name=Ana,Tom', 'Task=Cleaning,Plumbing'] 然后是数据帧df: Name | Category | Task | OrderNum Bryan | worker,manager | Cleaning,Plumbing | 2 Ana,Tom | worker,manager | Cleaning,Plumbing | 3 我想找
l1 = ['Category=worker,manager','Name=Ana,Tom', 'Task=Cleaning,Plumbing']
然后是数据帧df:
Name | Category | Task | OrderNum
Bryan | worker,manager | Cleaning,Plumbing | 2
Ana,Tom | worker,manager | Cleaning,Plumbing | 3
我想找到一个列表项,在相应的df列中找到匹配的值,&当找到列表的所有匹配项时,然后从OrderNum
列返回其值
我怎样才能得到它呢?给定:
>>> l1 = ['Category=worker,manager','Name=Ana,Tom', 'Task=Cleaning,Plumbing']
>>>
>>> df
Name Category Task OrderNum
0 Bryan worker,manager Cleaning,Plumbing 2
1 Ana,Tom worker,manager Cleaning,Plumbing 3
您可以从l1
形成如下查询:
>>> query = ' and '.join("{} == '{}'".format(*s.split('=')) for s in l1)
>>> query
"Category == 'worker,manager' and Name == 'Ana,Tom' and Task == 'Cleaning,Plumbing'"
。。。然后发布
>>> df.query(query)
Name Category Task OrderNum
1 Ana,Tom worker,manager Cleaning,Plumbing 3
或
或
如果你只期望一次命中,或者
>>> result = df.query(query)['OrderNum'].iat[0]
>>> result
3
如果您希望至少有一次命中,并且希望将
结果
分配给第一次命中,无论有多少次。此列表是不可能的。请发布不抛出语法错误的数据结构。@timgeb更正了列表器result,*.\udf.query(query)['OrderNum']
,如果超过1个。@coldspeed在这种情况下可能iat[0]
更好,因为不需要解包一个潜在的大序列。@timgeb它给我的结果是空数据帧。但是df肯定不是空的。@user10096621那么您的数据帧看起来不像您说的那样。正如你所看到的,我复制粘贴了一个解释器会话。(我想这就是你没有发布一条消息的原因:)@user10096621如果没有一条消息,我就帮不了你。
>>> result, = df.query(query)['OrderNum']
>>> result
3
>>> result = df.query(query)['OrderNum'].iat[0]
>>> result
3