我有一个pandas数据帧 一个名为:entity的列 当我通过以下方式打印列时:
df.entity
输出看起来像这样(我有267行,这只是前两行)
[(East, NNP), (India, CTR), (Company, ORG)]
[(Pasteur, ZZP)]
如何获得输出类似的新列:
East, India, Company
Pasteur
答案 0 :(得分:2)
使用apply
In [4697]: df.entity.apply(lambda x: ', '.join(t[0] for t in x))
Out[4697]:
0 East, India, Company
1 Pasteur
Name: entity, dtype: object
详细
entity
0 [(East, NNP), (India, CTR), (Company, ORG)]
1 [(Pasteur, ZZP)]
答案 1 :(得分:2)
选项1
zip
和迭代器
df.assign(entity=[', '.join(next(zip(*r))) for r in df.entity])
entity
0 East, India, Company
1 Pasteur
选项2
@ Zero的答案的理解版本。应该更快。
df.assign(entity=[', '.join([x[0] for x in r]) for r in df.entity])
entity
0 East, India, Company
1 Pasteur
设置
df = pd.DataFrame(dict(
entity=[
[('East', 'NNP'), ('India', 'CTR'), ('Company', 'ORG')],
[('Pasteur', 'ZZP')]
]))
答案 2 :(得分:1)
这是另一种解决方案
df['New']=df.entity.apply(pd.Series).stack().apply(pd.Series).groupby(level=0)[0].agg(lambda x: ','.join(set(x)))
df
Out[74]:
entity New
0 [(East, NNP), (India, CTR), (Company, ORG)] India,Company,East
1 [(Pasteur, ZZP)] Pasteur
数据输入
df=pd.DataFrame({'entity':[[('East', 'NNP'), ('India', 'CTR'), ('Company', 'ORG')],[('Pasteur', 'ZZP')] ]})