3 回答
TA贡献1817条经验 获得超14个赞
您可以使用get_dummies此处有效地执行此操作:
dummies = (df['allies'].str.get_dummies(sep=', ')
.reindex(df['country'].unique(), axis=1)
.add_suffix('_ally'))
df.join(dummies)
country allies USA_ally China_ally Singapore_ally
0 USA Turkey, UK, France, India 0 0 0
1 China DPRK, Singapore 0 0 1
2 Singapore USA, China 1 1 0
在哪里,
dummies
USA_ally China_ally Singapore_ally
0 0 0 0
1 0 0 1
2 1 1 0
TA贡献1813条经验 获得超2个赞
让我们试试这个,用它series.unique来识别独特的国家,然后str.contains检查它是否存在。
for c in df.country.unique():
df[f'{c}_Aally'] = df.allies.str.contains(c).astype(int)
df
Out[20]:
country allies USA_Aally China_Aally Singapore_Aally
0 USA Turkey, UK, France, India 0 0 0
1 China DPRK, Singapore 0 0 1
2 Singapore USA, China 1 1 0
TA贡献2016条经验 获得超9个赞
这是您的代码的概括,首先获取列中出现的所有唯一字母letter,然后分别循环遍历它们并基本上对每个字母执行您在上面所做的事情。
complete_letter_set = set(''.join(df['letter'])
for l in complete_letter_set:
df[f"letter{l}exists"] = df['letter'].map(lambda x: int(l in x))
请注意,我已将条件简化1 if A in x else 0为 just int(l in x),因为int(True) == 1无论如何int(False) == 0。
添加回答
举报