【问题标题】:combine and replace value dataframe pandas合并和替换值数据框 pandas
【发布时间】:2020-07-17 20:39:55
【问题描述】:

我有两个日期和客户 ID 相同但数量不同的数据框。

我尝试获取另一个具有 dfA 数量值的数据帧,并在 dfA 不存在时将另一个 0 保留在 dfB 上

dfA:
    client_id  date         amount
0     1        2020-07-11    100
1     1        2020-07-10    90
2     1        2020-07-09    80
3     1        2020-07-12    70
3     1        2020-07-01    86

dfB:
    client_id  date         amount
0     1        2020-07-11    0
1     1        2020-07-10    0
2     1        2020-07-09    0
3     1        2020-07-07    0
4     1        2020-07-06    0
5     1        2020-07-05    0
5     1        2020-07-04    0
3     1        2020-07-03    0
4     1        2020-07-02    0
5     1        2020-07-01    0

我想得到:

dfResult:
    client_id  date         amount
0     1        2020-07-11    100
1     1        2020-07-10    90
2     1        2020-07-09    80
3     1        2020-07-07    70
4     1        2020-07-06    0
5     1        2020-07-05    0
5     1        2020-07-04    0
3     1        2020-07-03    0
4     1        2020-07-02    0
5     1        2020-07-01    86

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    您可以将concat df 放在一起,按数量排序,然后删除重复项。

    dfResult = pd.concat([dfA,dfB]).sort_values(by='amout',ascending = False).drop_duplicates(subset=['client_id','date'],keep='first').reset_index().sort_values(by=['client id','date'],ascending = (True,False))
    

    【讨论】:

    • 你好,抱歉附加类型错误:无法将类型“时间戳”与类型“日期”进行比较
    • dfb 数据框
    • date_range = pd.date_range(date_begin.date(), date_end.date()) data = pd.DataFrame([], columns=['client_id', 'date', 'amount'] ) 数据['date'] = date_range
    【解决方案2】:

    试试这个,

    (
        dfB.date.map(
            dfA.set_index('date')['amount'].to_dict()
        ).fillna(0.0)
    )
    

    或者

    (
        dfB.merge(
            dfA, on=['client_id', 'date'], suffixes=("_x", ""), how='left'
        ).fillna(0.0).drop(columns=["amount_x"])
    )
    

       client_id        date  amount
    0          1  2020-07-11  100.0
    1          1  2020-07-10   90.0
    2          1  2020-07-09   80.0
    3          1  2020-07-07    0.0
    4          1  2020-07-06    0.0
    5          1  2020-07-05    0.0
    5          1  2020-07-04    0.0
    3          1  2020-07-03    0.0
    4          1  2020-07-02    0.0
    5          1  2020-07-01   86.0
    

    【讨论】:

    • 这会忽略client_id,这(我猜)有点重要
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    相关资源
    最近更新 更多