Как скопировать значения из одного df в исходный df с определенным условием? - PullRequest
2 голосов
/ 27 мая 2019

В настоящее время я работаю над проблемой кластеризации, и у меня проблема с копированием значений из одного кадра данных в исходный кадр данных.

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

Пожалуйста, помогите мне с проблемой: как скопировать значения из второго 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']])

Но он получает ту же ошибку или ошибкукак 'Customer 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'

Но у меня другой кластер для одного и того же клиента.

CustomerID_x |Дата |Время |TotalSum |CohortMonth |CohortIndex |CustomerID_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 голосов
/ 27 мая 2019

Учитывая то, что вы написали, я думаю вы хотите:

>>> 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...