python - 将数据与另一个数据框中两列中的数据进行比较以填充第一个数据框中的第三列

标签 python python-3.x pandas

我的新手与 Pandas 的斗争仍在继续,所以我想问一下。

我有两个 Excel 文件,如下所示:

<表类=“s-表”> <标题> id 姓名 组 郎 <正文> 1 蓝色 1 2 蓝色 1 3 红 2 4 红色 2 5 绿色 3 6 佛得角 3 7 黄色 4

列名称可能包含第二个 Excel 文件的西类牙语和英语列中不存在的值,而西类牙语和英语列可能包含列名称中不存在的值。我想要所有可能的值。

我的第二个文件如下所示:

<表类=“s-表”> <标题> 英语 西类牙语 组 <正文> 蓝色 蓝色 1 红色 红 2 绿色 佛得角 3

我想要做的是用值填充第一个数据帧的最后一列,所以它看起来像这样:

<表类=“s-表”> <标题> id 姓名 组 郎 <正文> 1 蓝色 1 zh 2 蓝色 1 sp 3 红 2 sp 4 红色 2 zh 5 绿色 3 zh 6 佛得角 3 sp 7 黄色 4

我一直在尝试这段代码,但它不起作用:

df2 = pd.melt(df2, id_vars=['group'], value_vars=['en', 'sp'], value_name='lan')
merged_df = pd.merge(df1, df2, left_on='lang', right_on='lan')[['name', 'group', 'lang']]

最佳答案

考虑你的例子

df = pd.DataFrame([['red', 'rojo', 2], ['blue', 'azul', 1]],  columns = ['english', 'spanish', 'group'])
df2 = pd.DataFrame([['red', 2], ['blue', 1], ['azul', 1]],  columns = ['name', 'group'])

你可以这样做:

eng_df = pd.merge(df2, df, how='inner', left_on=['group', 'name'], right_on=['group','english'] )
eng_df['leng'] = 'en'
sp_df = pd.merge(df2, df, how='inner', left_on=['group', 'name'], right_on=['group','spanish'] )
sp_df['leng'] = 'sp'
eng_df.append(sp_df)[['name','group','leng']].reset_index()

Checkout output here

也许不是最直接的解决方案,但至少它有效。

如果不需要,您可以跳过加入“组”,但我认为这很重要,因为您在示例中提到了它。

关于python - 将数据与另一个数据框中两列中的数据进行比较以填充第一个数据框中的第三列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66681913/

相关文章:

python - 如何将字符串拆分为字符矩阵

python - 非阻塞套接字可以从读取器/写入器引发 BlockingIOError 吗?

python - 如何在 Python 中进行一次热编码?

python - Django 南 : detecting if fake migrations were applied in production

python - Numpy 的平均重复模式数

python-3.x - 带有用于 ArangoDB 的 python-arango 驱动程序的 UPSERT

python - 屏幕截图程序-透明截图区域

python - 用于比较多个数据列的循环 T 检验

python - 是否保证对 Pandas 数据框中的级别列表进行排序?

python - 错误 : Microsoft Visual C++ 10. 0 是必需的(无法找到 vcvarsall.bat)。在 Windows 10 64 位上安装 Scrapy 时