首页 > 解决方案 > 如何在特定条件下将值从一个df复制到原始df?

问题描述

目前我正在研究聚类问题,并且将值从一个数据帧复制到原始数据帧时遇到问题。

    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']])

但它会出现相同的错误或错误,例如 df 中没有的“客户 ID”...抱歉,如果问题不清楚且格式错误...这是我在 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 | 钠 | 1.0

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

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

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

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

标签: pythonarrayspandasdataframecopy

解决方案


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

>>> 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

推荐阅读