首页 > 解决方案 > 根据另一列是否包含每个行名创建新列

问题描述

尝试使用 pandas 遍历每一行,评估该行的 B 列值是否包含 A 列中的任何值,然后填充与 A 行中的每个值对应的新列 C、D、E...。代码下面是我必须做的事情才能获得相同的结果,但在这里我需要事先知道 A 行中可能存在哪些值。

d = {'country': ["USA", "China", "Singapore"], 'allies': ["Turkey, UK, France, India", "DPRK, Singapore", "USA, China"]}
df = pd.DataFrame(data=d)

df["USAally"] = df['allies'].map(lambda x: 1 if "USA" in x else 0)
df["Chinaally"] = df['allies'].map(lambda x: 1 if "China" in x else 0)
df["Singaporeally"] = df['allies'].map(lambda x: 1 if "Singapore" in x else 0)

标签: pythonpandas

解决方案


您可以使用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

推荐阅读