【发布时间】:2018-03-10 17:50:58
【问题描述】:
我有一个熊猫数据框 一个名为:实体的列 当我通过以下方式打印列时:
df.entity
输出看起来像这样(我有 267 行这只是前两行)
[(East, NNP), (India, CTR), (Company, ORG)]
[(Pasteur, ZZP)]
我怎样才能得到一个新列的输出是这样的:
East, India, Company
Pasteur
【问题讨论】:
我有一个熊猫数据框 一个名为:实体的列 当我通过以下方式打印列时:
df.entity
输出看起来像这样(我有 267 行这只是前两行)
[(East, NNP), (India, CTR), (Company, ORG)]
[(Pasteur, ZZP)]
我怎样才能得到一个新列的输出是这样的:
East, India, Company
Pasteur
【问题讨论】:
这是另一个解决方案
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')] ]})
【讨论】:
选项 1zip 和迭代器
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')]
]))
【讨论】:
for loop :) 不错
apply 的理解
使用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)]
【讨论】: