python - 根据另一列是否包含每个行名创建新列
问题描述
尝试使用 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)
解决方案
您可以使用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
推荐阅读
- sql - 注册:程序出错
- python - SpaCy 使用自定义 Sentencizer 错误将模型保存到磁盘
- sql - 没有小计的 SQL 总计
- php - php数组在循环时只返回一个数组值
- r - 每组的行数以及其他汇总函数
- sqlite - 如何在 Next.js 中更正 SQLite“没有这样的表”?
- java - 更改 Minecraft Hotbar 图标 / FileInputStream
- node.js - Discord.js:为什么它没有正确计算成员?
- javascript - Twilio 允许所有预订更新策略不起作用
- macos - Android Studio gets freezing in MacOs Big Sur Update