Pandas:查看项目是否在数据框中 Series.series 的列表中
Pandas: Look if items are in a list in Series.series in a dataframe
我有一个看起来像这样的数据框(小版本):
A B C
0 125 ADB [AF:12]
1 189 ACB [AF:78, AF:85, AF:98]
2 148 ADB []
3 789 ARF [AF:89, AF:85, AF:12]
4 789 BCD [AF:76, AF:25]
如何查看 "C" 列中的某些项目是否在列表中?
知道当我输入(df.C)时我得到 class 'pandas.core.series.Series'
如果列表是:
['AF:12', 'AF25']
预期输出为:
A B C D
0 125 ADB [AF:12] True
1 189 ACB [AF:78, AF:85, AF:98] False
2 148 ADB [] False
3 789 ARF [AF:89, AF:85, AF:12] True
4 789 BCD [AF:76, AF:25] True
我试过了df['D'] = df['C'].isin(list)
但可能到处都是假的,因为 "C" 是列表的列表。
有办法解决这个问题吗?
如有任何帮助,我们将不胜感激
def is_in_list():
for ele in df['C']:
if ele in list:
return True
return False;
也许这个功能可以实现。
data = {'B':['ADB','ACB','ADB','ARF','BCD'],
'A':[125,189,148,789,789],
'C':[['AF:12'],['AF:78', 'AF:85', 'AF:98'],[],
['AF:89', 'AF:85', 'AF:12'],['AF:76', 'AF:25']]}
df = pd.DataFrame(data)
def in_list(list_to_search,terms_to_search):
results = [item for item in list_to_search if item in terms_to_search]
if len(results) > 0:
return 'True'
else:
return 'False'
df['D'] = df['C'].apply(lambda x: in_list(x, ['AF:12', 'AF:25']))
结果:
A B C D
0 125 ADB [AF:12] True
1 189 ACB [AF:78, AF:85, AF:98] False
2 148 ADB [] False
3 789 ARF [AF:89, AF:85, AF:12] True
4 789 BCD [AF:76, AF:25] True
如果 C
列的元素类型是 list
,那么我相信一种方法是在列表和 set
的元素之间使用 set
交集=11=] 列使用 Series.apply
方法。示例 -
setlst = set(yourlist)
df['D'] = df['C'].apply(lambda x: bool(setlst.intersection(x)))
如果type(df['C'][0])
是list
,您可以确认C
是列表类型。
另请注意,不建议使用列表作为变量名,因为它会影响内置类型 list
。
我有一个看起来像这样的数据框(小版本):
A B C
0 125 ADB [AF:12]
1 189 ACB [AF:78, AF:85, AF:98]
2 148 ADB []
3 789 ARF [AF:89, AF:85, AF:12]
4 789 BCD [AF:76, AF:25]
如何查看 "C" 列中的某些项目是否在列表中?
知道当我输入(df.C)时我得到 class 'pandas.core.series.Series'
如果列表是:
['AF:12', 'AF25']
预期输出为:
A B C D
0 125 ADB [AF:12] True
1 189 ACB [AF:78, AF:85, AF:98] False
2 148 ADB [] False
3 789 ARF [AF:89, AF:85, AF:12] True
4 789 BCD [AF:76, AF:25] True
我试过了df['D'] = df['C'].isin(list)
但可能到处都是假的,因为 "C" 是列表的列表。
有办法解决这个问题吗?
如有任何帮助,我们将不胜感激
def is_in_list():
for ele in df['C']:
if ele in list:
return True
return False;
也许这个功能可以实现。
data = {'B':['ADB','ACB','ADB','ARF','BCD'],
'A':[125,189,148,789,789],
'C':[['AF:12'],['AF:78', 'AF:85', 'AF:98'],[],
['AF:89', 'AF:85', 'AF:12'],['AF:76', 'AF:25']]}
df = pd.DataFrame(data)
def in_list(list_to_search,terms_to_search):
results = [item for item in list_to_search if item in terms_to_search]
if len(results) > 0:
return 'True'
else:
return 'False'
df['D'] = df['C'].apply(lambda x: in_list(x, ['AF:12', 'AF:25']))
结果:
A B C D
0 125 ADB [AF:12] True
1 189 ACB [AF:78, AF:85, AF:98] False
2 148 ADB [] False
3 789 ARF [AF:89, AF:85, AF:12] True
4 789 BCD [AF:76, AF:25] True
如果 C
列的元素类型是 list
,那么我相信一种方法是在列表和 set
的元素之间使用 set
交集=11=] 列使用 Series.apply
方法。示例 -
setlst = set(yourlist)
df['D'] = df['C'].apply(lambda x: bool(setlst.intersection(x)))
如果type(df['C'][0])
是list
,您可以确认C
是列表类型。
另请注意,不建议使用列表作为变量名,因为它会影响内置类型 list
。