gpt4 book ai didi

python - Pandas - 检查列表列中的字符串列是否行

转载 作者:太空狗 更新时间:2023-10-30 00:27:13 25 4
gpt4 key购买 nike

我有一个数据框,你可以用它来构建:

dflist=[['123',['abc','qw3','123']],
['ab12',['3e4r5','12we3','asd23','q2w3']]]
df=pd.DataFrame(dflist,columns=['check','checklist'])

看起来像这样:

  check                    checklist
0 123 [abc, qw3, 123]
1 ab12 [3e4r5, 12we3, asd23, q2w3]

我想检查“check”列中的项目是否在“checklist”列的列表中。所以我希望生成的数据框看起来像:

  check                    checklist checkisin
0 123 [abc, qw3, 123] True
1 ab12 [3e4r5, 12we3, asd23, q2w3] False

我尝试了几种方法,包括以各种形式使用 .isin,包括 apply/lambda。并直接。

这个:

df['checkisin']=df.check.isin(df.checklist)

产生:

  check                    checklist  checkisin
0 123 [abc, qw3, 123] False
1 ab12 [3e4r5, 12we3, asd23, q2w3] False

它有两个 False。

试试这个:df['checkisin']=df.apply(lambda x:x.check.isin(x.checklist))给出这个错误:

AttributeError: ("'Series' object has no attribute 'check'", 'occurred at index check')

试试这个:

df['checkisin']=df.apply(lambda x:x['check'] in x.checklist)

给出这个错误:

KeyError: ('check', 'occurred at index check')

我确定我在这里遗漏了一些简单的东西。我知道我可以循环这个,但是寻找 Pandas Dataframe 列明智的解决方案,因为我拥有的 DF 非常大并且试图“最”有效地处理。

谢谢!

最佳答案

你有一列列表,当然 pandas 没有任何原生支持对结构如此糟糕的数据进行操作的函数。如果你想要最好的性能,我建议使用列表理解:

df['checkisin'] = [c in l for c, l in zip(df['check'], df['checklist'])]
df
check checklist checkisin
0 123 [abc, qw3, 123] True
1 ab12 [3e4r5, 12we3, asd23, q2w3] False

如果您担心 NaN 和类型不匹配,您可以考虑实现 try-except 错误处理:

def check_isin(check, checklist):
try:
return check in checklist
except TypeError:
return np.NaN

df['checkisin'] = [
check_isin(c, l) for c, l in zip(df['check'], df['checklist'])
]

Evidence suggests对于无法向量化的操作,列表推导式是最理想的选择。

PS,如果您计划进行大量成员资格测试,请考虑将您的列表列转换为集合列。


这是一个如何向量化此操作的示例。

from itertools import chain

cl = df.pop('checklist')
df = (pd.DataFrame(df.reset_index().values.repeat(cl.str.len(), axis=0),
columns=['group', *df.columns])
.assign(checklist=list(chain.from_iterable(cl))))

df

group check checklist
0 0 123 abc
1 0 123 qw3
2 0 123 123
3 1 ab12 3e4r5
4 1 ab12 12we3
5 1 ab12 asd23
6 1 ab12 q2w3
7 1 ab12 123

(df['check'] == df['checklist']).groupby(df.group).any()

group
0 True
1 False
dtype: bool

关于python - Pandas - 检查列表列中的字符串列是否行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56821941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com