【问题标题】:Comparing Two Pandas Dataframes and Creating a List of Values比较两个 Pandas 数据框并创建值列表
【发布时间】:2017-06-23 16:14:06
【问题描述】:

我有 2 个pandas dataframes:

df1 = pd.DataFrame({'Model': [1,2,3,4,5], 'Color': ['Orange', 'Red', 'Black', 'Purple', 'Pink']})

Color   Model
Orange   1
Red      2
Black    3
Purple   4
Pink     5

df2 = pd.DataFrame({'Color': ['Orange', 'Green', 'Purple', 'Black', 'Indigo'], 'Drink': ['Soda', 'Juice', 'Water', 'Soda', 'Lemonade'], 'Model': [1,1,4,6,8]})


Color   Drink   Model
Orange  Soda      1
Green   Juice     1
Purple  Water     4
Black   Soda      6
Indigo  Lemonade  8

我正在尝试从df2 创建一个饮料list,其颜色和型号与来自df1 的颜色和型号相匹配。对于上面的例子,输出应该是:

['Soda', 'Water']

我将如何做到这一点?我试过了:

drinks = []
for x in df1.Model:
    for y in df2.Model:
        for j in df1.Color:
            for k in df2.Color:
                if x == y and j == k:
                    drinks.append(df2.loc[df2['Model'] == x, 'Drink'].iloc[0])

返回:

['Soda', 'Soda', 'Soda', 'Soda', 'Soda', 'Soda', 'Water', 'Water', 'Water']

我想我已经接近但不知道如何摆脱重复。

【问题讨论】:

    标签: list python-3.x dataframe


    【解决方案1】:

    如果您确定重复的列表包含所有需要的值,您可以将其转换为 set()=)

    lst=['Soda', 'Soda', 'Soda', 'Soda', 'Soda', 'Soda', 'Water', 'Water', 'Water']
    unique_list=list(set(lst))
    

    【讨论】:

    • 是的,我可以这样做,尽管我的实际数据集比示例大得多,并且按照我编写的方式处理它效率太低
    【解决方案2】:

    我设法通过以下方式解决了这个问题:

    df3 = df2.loc[(df2['Color'].isin(list(df1.Color))) & df2.Model.isin(list(df1.Model))]
    
    list(df3.Drink)
    

    输出:

    ['Soda', 'Water']
    

    【讨论】:

      猜你喜欢
      • 2022-11-18
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      相关资源
      最近更新 更多