如何在一定条件下将值从一个df复制到原始df?

时间:2019-05-26 22:16:26

标签: python arrays pandas dataframe copy

当前,我正在处理集群问题,并且在将值从一个数据帧复制到原始数据帧时遇到问题。

    CustomerID | Date |     Time| TotalSum | CohortMonth| CohortIndex
--------------------------------------------------------------------
0   |17850.0|2017-11-29||08:26:00|15.30|2017-11-01|1|
--------------------------------------------------------------------
1   |17850.0|2017-11-29||08:26:00|20.34|2017-11-01|1|
--------------------------------------------------------------------
2   |17850.0|2017-11-29||08:26:00|22.00|2017-11-01|1|
--------------------------------------------------------------------
3   |17850.0|2017-11-29||08:26:00|20.34|2017-11-01|1|
--------------------------------------------------------------------

要复制具有值(簇)的数据框:

CustomerID|Cluster
------------------
12346.0   |     1
------------------
12346.0   |     1
------------------
12346.0   |     1
------------------

请帮助我解决以下问题:如何根据客户ID标准将值从第二个df复制到第一个数据框。

我尝试了如下代码:

df.merge(ic,left_on='CustomerID',right_on='Cluster',how='left').drop('CustomerID',1).fillna('')

但是它不起作用,我得到一个错误...

此外,它还尝试了以下代码的版本:

df, ic = [d.reset_index(drop=True) for d in (df, ic)]
ic.join(df[['CustomerID']])

但是它会出现相同的错误或错误,例如“客户ID”不在df中... 很抱歉,如果不清楚并格式化错误的问题...这是我关于stackoverflow的第一个问题。谢谢大家。

更新

我已经尝试过了

df1=df.merge(ic,left_on='CustomerID',right_on='Cluster',how='left')

 if ic['CustomerID'].values != df1['CustomerID_x'].values:
    df1.Cluster=ic.Cluster
 else:
    df1.Cluster='NaN'

但是我为同一位客户有不同的集群。

客户ID_x |日期|时间|总和|同类群组月份|同类群组索引|客户ID_y |集群

0 | 17850.0 | 2017-11-29 || 08:26:00 | 15.30 | 2017-11-01 | 1 | NaN | 1.0

1 | 17850.0 | 2017-11-29 || 08:26:00 | 20.34 | 2017-11-01 | 1 | NaN | 0.0

2 | 17850.0 | 2017-11-29 || 08:26:00 | 22.00 | 2017-11-01 | 1 | NaN | 1.0

3 | 17850.0 | 2017-11-29 || 08:26:00 | 20.34 | 2017-11-01 | 1 | NaN | 2.0

4 | 17850.0 | 2017-11-29 || 08:26:00 | 20.34 | 2017-11-01 | 1 | NaN | 1.0

1 个答案:

答案 0 :(得分:0)

鉴于您所写的内容,我认为您想要的:

>>> df1 = pd.DataFrame({"CustomerID": [17850.0] * 4, "CohortIndex": [1,1,1,1] })
>>> df1
   CustomerID  CohortIndex
0     17850.0            1
1     17850.0            1
2     17850.0            1
3     17850.0            1

>>> df2
   CustomerID  Cluster
0     12346.0        1
1     17850.0        1
2     12345.0        1

>>> pd.merge(df1, df2, 'left', 'CustomerID')
   CustomerID  CohortIndex  Cluster
0     17850.0            1        1
1     17850.0            1        1
2     17850.0            1        1
3     17850.0            1        1