【问题标题】:Merge/Join pandas dataframe with condition合并/加入有条件的熊猫数据框
【发布时间】:2022-07-07 13:05:24
【问题描述】:

我有两个 pandas DataFrame df1df2。它们之间的关系是一对多的,在某些情况下可以是一对一的。当关系是一对多时,我想加入具有某些条件的列。我会用一些数据来说明。

import pandas as pd

df1 = pd.DataFrame({
                    'vid': [1, 2, 3, 4, 5],
                    'lid': [6, 7, 8, 9, 10],
                    'v': [3, 5, 6, 1, 9]
                  })

df2 = pd.DataFrame({
                    'lid': [6, 6, 8, 8, 10],
                    'av': ['$10','$5','$4','$3','$2'],
                    'cr': [0.04, 0.05, 0.03, 0.04, 0.01]
                  })

对于df2 中存在多个连接的行,即lid 68,我想应用一些函数,比如获取avcrmax

预期输出:

vid lid  v  av      cr
1    6   3  $10     0.05
2    7   5  np.nan  np.nan
3    8   6  $5      0.04
4    9   1  np.nan  np.nan
5    10  9  $2      0.01

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    用途:

    df2['av1'] = df2['av'].str.strip('$').astype(int)
    df = (df1.merge(df2.sort_values(['lid','cr','av1'])
                       .drop_duplicates('lid'), how='left', on='lid')
                       .drop('av1', axis=1))
    print (df)
       vid  lid  v   av    cr
    0    1    6  3  $10  0.04
    1    2    7  5  NaN   NaN
    2    3    8  6   $4  0.03
    3    4    9  1  NaN   NaN
    4    5   10  9   $2  0.01
    

    【讨论】:

    • 虽然这是预期的输出,但我正在寻找一种可以应用不同功能的解决方案maxminmean 等。您能建议一个更灵活的解决方案吗?
    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    相关资源
    最近更新 更多