python - 如何在特定条件下将值从一个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
解决方案
鉴于您所写的内容,我认为您想要:
>>> 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
推荐阅读
- java - 关于docker-java的withCmd命令
- reactjs - 使用 useReducer 和其他 reducer 清除表单
- matlab - FFT(快速傅立叶变换)的频率分辨率(或增量)
- python - MaxPooling2D 给出 ValueError
- list - Haskell 编译器在简单列表代码上的错误
- cuda - CUDA cudaMemcpyAsync 使用单个流来托管
- python - 通过python具有多个组的ngroup
- java - 在 Android Studio 中读取二进制数据
- python - /account/delete/testuser1 处的 AttributeError:“str”对象没有属性“field”
- javascript - React Redux - 组件不会在使用嵌套属性的状态更改时重新渲染