Операции на сумму значений с использованием Python панды - PullRequest
0 голосов
/ 29 июня 2018

У меня есть 2 кадра данных «транзакции» и «смещения»

Коррекция:

    Contact Account Name    
0   TODD HOWARD 
1   TODD HOWARD 
2   JEFF COX
3   JEFF COX    
4   TODD HOWARD 
5   JEFF COX    
6   MIKE BALDWIN    

сделки:

    Contact Account Name    
0   TODD HOWARD 
1   TODD HOWARD     
2   JEFF COX    
3   JEFF COX    
4   TODD HOWARD     
5   JEFF COX    
6   TODD HOWARD     
7   MIKE BALDWIN    
8   MIKE BALDWIN
9   JEFF COX    
10  JC WHITE    

Что он хочет сделать: 1) Стоит подсчитывать каждое уникальное значение. Для этого я использовал:

df1 = offsets.groupby('Contact Account Name').size()
df2 = transactions.groupby('Contact Account Name').size()

А у меня

df1:

Contact Account Name
TODD HOWARD               3
JEFF COX                  3
MIKE BALDWIN              1

df2:

Contact Account Name
JC WHITE                  1
TODD HOWARD               4
JEFF COX                  4
MIKE BALDWIN              2

2) Я хочу объединить оба кадра данных. Я пробовал merge, но это не сработало.

3) Я хочу создать еще один фрейм данных и рассчитать процент смещений от общих транзакций.

Какой результат я хочу увидеть в конце:

Contact Account Name      Offset Percentage
TODD HOWARD               75
JEFF COX                  75
MIKE BALDWIN              50
JC WHITE                  100

Заранее спасибо!

1 Ответ

0 голосов
/ 29 июня 2018

Выход агрегации составляет Series, поэтому можно разделить на div с кратным mul и последним reset_index:

df = df1.div(df2, fill_value=1).mul(100).reset_index(name='Offset Percentage')
print (df)
  Contact Account Name  Offset Percentage
0             JC WHITE              100.0
1             JEFF COX               75.0
2         MIKE BALDWIN               50.0
3          TODD HOWARD               75.0

Аналогичное решение с value_counts:

df1 = offsets['Contact Account Name'].value_counts()
df2 = transactions['Contact Account Name'].value_counts()

df = (df1.div(df2, fill_value=1)
         .mul(100)
         .rename_axis('Contact Account Name')
         .reset_index(name='Offset Percentage'))
print (df)
  Contact Account Name  Offset Percentage
0             JC WHITE              100.0
1             JEFF COX               75.0
2         MIKE BALDWIN               50.0
3          TODD HOWARD               75.0

Если необходимо объединить обе серии, позвоните concat:

df = pd.concat([df2, df1], axis=1, keys=('Offset Percentage','b'))
df['Offset Percentage'] = df.b.div(df['Offset Percentage'], fill_value=1).mul(100)
df = df.drop('b', 1).rename_axis('Contact Account Name').reset_index()
print (df)
  Contact Account Name  Offset Percentage
0             JC WHITE              100.0
1             JEFF COX               75.0
2         MIKE BALDWIN               50.0
3          TODD HOWARD               75.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...