Сравнение значений столбцов двух фреймов данных и количества приращений - PullRequest
0 голосов
/ 22 января 2019

У меня есть два кадра данных, например, df1 =

Hair  Feathers  Eggs  Type
 0       0       0     1
 1       0       0     1
 0       1       0     2
 0       1       1     2
 0       0       1     6

и df2 =

Hair  Feathers  Eggs  Count
 0       0       0     
 1       0       0     
 1       0       1     

Как я могу сравнить первую строку df2 со всеми строками df1 в такойТаким образом, если значение df2.Hair равно значению df1.Hair, значение счетчика следует обновить, увеличив его на 1. И аналогично для второй строки df2 и т. д.Любая помощь будет высоко оценена.Результирующий вывод должен выглядеть так, это только для первой строки df2

Hair  Feathers  Eggs  Type  Count
 0       0       0     1      1
 0       0       0     2      2
 0       0       0     6      1

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Я считаю, что вам нужно GroupBy.size с merge:

print (df1.groupby(['Hair', 'Type']).size().reset_index(name='count'))
   Hair  Type  count
0     0     1      1
1     0     2      2
2     0     6      1
3     1     1      1

#if need default inner join
df3 = df2.merge(df1.groupby(['Hair', 'Type']).size().reset_index(name='count'), on='Hair')
#if need right join
#df3 = (df2.merge(df1.groupby(['Hair', 'Type']).size().reset_index(name='count'), 
#                  on='Hair', how='right'))
print (df3)

   Hair  Feathers  Eggs  Type  count
0     0         0     0     1      1
1     0         0     0     2      2
2     0         0     0     6      1
3     1         0     0     1      1
4     1         0     1     1      1
0 голосов
/ 22 января 2019

Вы можете использовать groupby и count для получения соответствующих значений, а затем merge для получения правильных значений в результирующем фрейме данных. Например:

data1 = {'Hair': [0,1,0,0,0],
'Feathers': [0,0,1,1,0],
'Eggs': [0,0,0,1,1],
'Type': [1,1,2,2,6]}
df = pd.DataFrame(data1)

data2 = {'Hair': [0,1,1],
'Feathers': [0,0,0],
'Eggs': [0,0,1]}

df2 = pd.DataFrame(data2)

df_counts = df.groupby(['Hair', 'Type']).agg('count')[['Feathers']].reset_index()
df_counts.rename(columns={'Feathers': 'Count'}, inplace=True)
pd.merge(df2, df_counts, how='outer', on='Hair')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...