我有一个嵌套的for循环,例如:
for x in df['text']:
for i in x:
if i in someList:
count++
df['text']
是一系列包含['word1', 'word2', 'etc']
之类单词的列表,
我知道我可以只使用for
格式,但我想将其转换为lambda函数。
我尝试做:
df['in'] = df['text'].apply(lambda x: [count++ for i in x if i in someList])
但这不是正确的语法。如何修改以使功能达到我的期望?
答案 0 :(得分:2)
我觉得您需要扩展行并使用isin
,因为对于熊猫,我们通常不尝试使用for loop。
df['in']=pd.DataFrame(df['text'].tolist(),index=df.index).isin(someList).sum(1)
答案 1 :(得分:2)
您不需要任何其他功能。只需创建一个序列(每个元素一个)即可求和。
count = sum(1 for x in df['text'] for i in x if i in someList)
答案 2 :(得分:2)
someList = [*'ABCD']
df = pd.DataFrame(dict(text=[*map(list, 'AB CD AF EG BH IJ ACDE'.split())]))
df
text
0 [A, B]
1 [C, D]
2 [A, F]
3 [E, G]
4 [B, H]
5 [I, J]
6 [A, C, D, E]
__contains__
i = np.arange(len(df)).repeat(df.text.str.len())
a = np.zeros(len(df), int)
np.add.at(a, i, [*map(someList.__contains__, np.concatenate(df.text))])
df.assign(**{'in': a})
text in
0 [A, B] 2
1 [C, D] 2
2 [A, F] 1
3 [E, G] 0
4 [B, H] 1
5 [I, J] 0
6 [A, C, D, E] 3
map
lambda
和__contains__
df.assign(**{'in': df.text.map(lambda x: sum(map(someList.__contains__, x)))})
text in
0 [A, B] 2
1 [C, D] 2
2 [A, F] 1
3 [E, G] 0
4 [B, H] 1
5 [I, J] 0
6 [A, C, D, E] 3