【问题标题】:How to fill one column in a csv by comparing values to three different columns in another csv file?如何通过将值与另一个 csv 文件中的三个不同列进行比较来填充 csv 中的一列?
【发布时间】:2021-06-08 15:34:36
【问题描述】:

由于我对熊猫完全陌生,所以我想问一下。

我有两个 CSV 文件。

其中之一在一列中包含不同语言的所有颜色:

我这里有三排蓝色:azul, bleu 在不同语言中都是蓝色的意思,所以它们应该在同一个组 1. rouge 和 rojo 是红色的意思,所以它们也在同一个组,所以它们应该有 2 个。

这是我的第一个表格颜色:

name group
blue 1
azul 1
bleu 1
rouge
red
rojo
verde
vert
green

以此类推,在我的 csv 中,此列组为空,我必须填写它

我还有第二个 CSV 文件,看起来像这样

表格颜色_语言:

english french spanish group
green vert verde 3
red rouge rojo 2
blue bleu azul 1

我想通过将第一个 CSV 文件与包含信息的第二个 CSV 文件进行比较来填充第一个 CSV 文件中的列组。

我发现了如何比较一列,但是如何比较一个 csv 的列与另一个 csv 的三列以填充第一个 CSV 中的组列?

df1 = pd.read_csv('colors.csv')
df2 = pd.read_csv('colors_language.csv')

mergedStuff = pd.merge(df1, df2, on=['name'], how='inner')

#I have tried also this, but it gives me information of Empty DataFrame
my_list = df1['name'].unique().tolist()
lang = df2[df2['english'].isin(my_list)]
print(lang)

这是我的代码,但它不起作用。我认为这是因为列名仅在一个 csv 中,但是如何将第一个 csv 中的名称连接到第二个 csv 中的英语、法语、西班牙语列?

【问题讨论】:

  • 在我看来,所有信息都在第二个 csv 中,而第一个 csv 是多余的。那是对的吗?如果是这样,您可以忽略第一个 csv 而只使用第二个 df2.set_index('group').stack().reset_index(name='name')[['name', 'group']]

标签: python-3.x pandas dataframe csv


【解决方案1】:

您可以使用map

使用df2,您可以创建一个字典d,然后将名称值映射到其对应的组。

d = dict(zip(df2.T.values[3], df2.values[:,:3].tolist()))
df1['group'] = df1.name.map(lambda x: [k for k in d if x in d[k]][0])

d:

{3: ['green', 'vert', 'verde'],
 2: ['red', 'rouge', 'rojo'],
 1: ['blue', 'bleu', 'azul']}

df1:

    name    group
0   blue    1
1   azul    1
2   bleu    1
3   rouge   2
4   red     2
5   rojo    2
6   verde   3
7   vert    3
8   green   3

【讨论】:

  • 非常感谢您的帮助!
【解决方案2】:

可以先用pd.melt将df2中的所有列转移到行中,再用pd.merge在颜色名称列上与df1合并:

df2 = pd.melt(df2, id_vars=['group'], value_vars=['english', 'french', 'spanish'], value_name='color')
merged_df = pd.merge(df1, df2, left_on='name', right_on='color')[['name', 'group']]

结果:

    name    group
0   blue    1
1   azul    1
2   bleu    1
3   rouge   2
4   red     2
5   rojo    2
6   verde   3
7   vert    3
8   green   3

【讨论】:

  • 非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2018-08-18
  • 2021-10-06
  • 1970-01-01
  • 2021-05-23
  • 2016-07-24
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
相关资源
最近更新 更多