【问题标题】:Filling new column in a dataframe based on 3 values in df1 matching 3 values in df2根据 df1 中的 3 个值匹配 df2 中的 3 个值填充数据框中的新列
【发布时间】:2018-10-22 10:01:32
【问题描述】:

假设我有 2 个数据框,它们共享列“shoe”、“size”和“color”。较小的数据框包含每个鞋子型号并有一列“price”。较大的数据框包含每只售出的鞋子,但不包含价格(我知道这没有意义,但我只是想解释我的问题)

我想找到一种方法在较大的数据框中为鞋的价格编译一个新列,这将从较小的数据框中获取 3 个共享列“鞋”、“尺寸”和“颜色”。

我尝试过由于大小不同而不起作用的合并,我尝试过使用 for 循环,但老实说,我还是个初学者。

谁能指出我正确的方向?

下面是一些使用随机数据生成数据帧的代码:

def Rand(start, end, num): 
res = [] 

for j in range(num): 
    res.append(random.randint(start, end)) 

return res


df1 = pd.DataFrame({"shoe":range(10), 
"size":range(1,11),"color":range(2,12),
'price':range(100,110)})

df2 = pd.DataFrame({"shoe": Rand(1, 10, 100),
"size": Rand(1, 11, 100), "color": Rand(1, 11, 100)})

鉴于上述数据框,我正在尝试在 df2 中创建一个“价格”列,通过将 df2 的列与 df1 中相应列中的匹配值进行匹配来找到该列

【问题讨论】:

  • 你能创建一些示例数据吗?
  • 最好有一个具体的例子,在这种情况下是输入数据帧和预期的输出,而不是只用文字描述你想要的。
  • 相信你需要df = df1.merge(df2, how='left')
  • @jezrael 年,我觉得很像
  • 我刚刚在原始帖子中添加了代码来帮助编译可用于帮助解决我的问题的数据帧。如果您有任何其他问题,请告诉我,我可以帮助您澄清

标签: python python-3.x pandas dataframe


【解决方案1】:

也许你需要这个:

import pandas as pd
file1 = pd.DataFrame({"shoe":range(10), "size":range(1,11),"color":range(2,12), 'price':range(100,110)})
file2 = pd.DataFrame({"shoe":range(100), "size":range(1,101),"color":range(2,102)})
df = pd.merge(file1,file2,how='right', on = ["shoe","size","color"])
df.head()

在此示例中,您将获得新的数据框,它合并匹配三列。 你可以在这里阅读更多内容https://pandas.pydata.org/pandas-docs/stable/merging.html

【讨论】:

  • 它将匹配 3 列,但据我了解,它不会包括我们之后的“价格”列,因为我们进行了正确的合并并且价格列在 '左'数据框。如果我对合并有任何误解,请告诉我
  • @Armon 尝试使用我的示例。要了解 file1 这是您的较小数据框, file2 是您的大数据框。 “价格”列将包含在 df 中。
  • 谢谢,起初我很困惑,但我才意识到合并不起作用的原因是因为一个数据框中的一列由数字 astype(str) 组成,这弄乱了合并: )
  • 似乎合并没有正确保留较大数据框中的总行数。合并后的数据框的形状明显大于较小和较大的数据框;你知道我如何合并它们,以便在新数据框中找到的行与更大的数据框中的行相同,唯一的区别是添加的列(在上面的示例中对应的价格)?
  • @Armon 如果您使用了数据框,那么您需要将参数 how 设置为 right。如果大数据框在左侧,则需要将how 更改为左侧(例如pd.merge(big_df,small_df,how='left')`
猜你喜欢
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
相关资源
最近更新 更多