【发布时间】:2018-05-24 01:33:50
【问题描述】:
我有一个 DataFrame,其中每个单元格都包含一个列表。我有一个函数,旨在根据条件在每个列表中插入一个“1”。但是,我的代码并没有达到我的预期。
每个列表s 包含来自其他两个列表的元素:(1) 成员列表 (2) 非成员列表。我的目标是在任何“成员”后面跟着任何两个“非成员”时将数字“1”插入s。 s 最多应添加一个“1”。这是代码。
import pandas as pd
members = ['AA', 'BBB', 'CC', 'DDDD']
non_members = ['EEEE', 'FF', 'GGG', 'HHHHH', 'III', 'JJ']
s = ['AA', 'EEEE', 'GGG', 'FF']
df = pd.DataFrame({'string':[s]}) # each row of the column 'string' is a list
所以给定s:
['AA', 'EEEE', 'GGG', 'FF']
我想要达到的结果是这样的:
['AA', '1', 'EEEE', 'GGG', 'FF']
这是我的代码:
d = df['string']
def func(row):
out = ""
look = 2
for i in range(len(row)-look):
out += row[i]
if (row[i] in members) & \
(row[i+1] in non_members) & \
(row[i+2] in non_members):
out += '1' + row[i+1:]
break
return out
e = d.apply(func)
print(e)
这仅给出以下结果:
string
dtype: object
但我试图得到的是:
['AA', '1', 'EEEE', 'GGG', 'FF']
到达那里最简单的方法是什么?
【问题讨论】:
标签: python-3.x dataframe