Как создать новый фрейм данных pandas после сравнения двух столбцов фрейма данных на основе условия? - PullRequest
0 голосов
/ 05 августа 2020

Фрейм данных 1

cust_id1   cust_id2  
23           50     
23           51     
23           52      
24           32     
25           40  
25           41

Фрейм данных 2

cust_id    
50
51
52
32
40

ДЛЯ КАЖДОГО cust_id1, проверьте, является ли cust_id2 фрейма данных 1 присутствует в cust_id кадра данных 2. ЕСЛИ ДА, ЗАТЕМ создайте новый кадр данных. Кроме того, я также хотел бы добавить новое количество столбцов для cust_id2

Ожидаемый результат в новом фрейме данных 3

cust_id1   cust_id2  count_cust_id2
23           50           1
23           51           1
23           52           1
24           32           1
25           40           1

Это это то, что я пробовал

uniq = df1['cust_id1'].dropna().unique()

cust_id_grouped = df1.groupby(['cust_id1'], as_index = False)

for i in uniq:

    all_groups = cust_id_grouped.get_group(i)

    count_cust_id2 = 0
    for index, row in all_groups.iterrows():            
        if (row.cust_id1.isin(df2. cust_id)):
            count_cust_id2 = count_cust_id2 + 1

Часть 2 В дополнение к вышеуказанным фреймам данных у меня есть аналогичные фреймы данных.

cust_id1   cust_id2  
23           50     
23           51     
23           52      
24           32     
25           40  
25           41
26           50     

Dataframe 5

cust_id    
50
51
52
32
40
41
50

Ожидаемый результат должен обновить кадр данных 3,

cust_id1   cust_id2  count_cust_id2
23           50           2
23           51           2
23           52           2
24           32           2
25           40           2
25           41           1
26           50           1

У меня есть несколько таких фреймов данных, и каждая из этих групп (df1-df2) и (df4-df5) представляет один месяц. Подсчет фактически за месяц.

1 Ответ

1 голос
/ 05 августа 2020

Используйте Series.isin для проверки всех значений, тестирование по группам не требуется. Последнее получение считается по GroupBy.transform и GroupBy.size:

df3 = df1[df1.cust_id2.isin(df2.cust_id)].copy()
df3['count_cust_id2'] = df3.groupby('cust_id2')['cust_id2'].transform('size')
print (df3)
   cust_id1  cust_id2  count_cust_id2
0        23        50               1
1        23        51               1
2        23        52               1
3        24        32               1
4        25        40               1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...