Python, Pandas, единственные суммы, принимающие - PullRequest
0 голосов
/ 29 июня 2018

Электронная таблица Excel, как показано ниже (примечание: идентифицируйте столбец A с дублированными значениями). Я хочу узнать сумму каждого Контрактного типа, взяв каждый ID, который считается только один раз (уникальный).

enter image description here

data = {'ID': ["380689","380689","480562","480562","480562","14805","47089","56251","56251","56251","322624","322624","322624","85964","85964","85964","342225","342225","4589","23591","23591","235225"], 
'Contract_type' : ["Other","Other","Type-I","Type-I","Type-I","Type-II","Type-II","Type-II","Type-II","Type-II","Type-II","Type-II","Type-II","Type-III","Type-III","Type-III","Part-time","Part-time","Part-time","Full-time","Full-time","Full-time"],
'Unit_Weight': [335,335,119,119,119,119,52,452,452,452,19,19,19,165,165,165,165,165,165,724,724,16],
'Test_time' : ["16:26","07:39","18:48","22:32","03:54","03:30","09:57","18:52","19:03","18:06","18:52","03:51","04:00","22:02","13:35","13:43","10:29","06:30","12:20","12:52","17:30","13:10"],
'Tested' : [1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0],
'Internal' : [1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1]}

df = pd.DataFrame(data)

Я пытался:

print pd.pivot_table(df, index = ["Contract_type", "ID"]).Unit_Weight

Это дает:

Contract_type  ID    
Full-time      23591     724
               235225     16
Other          380689    335
....

Но я хочу, чтобы он показывал что-то вроде: Полная занятость 740 и т. Д.

Я тоже пробовал:

print pd.pivot_table(df, index = ["Contract_type"], values=["Unit_Weight"], aggfunc = np.sum)

Даёт:

Full-time             1464  # this is not considering the duplicated IDs

Какой правильный способ исправить линию? Спасибо.

Ответы [ 2 ]

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

Похоже, вы хотите учесть каждую пару (ID, тип контракта) только один раз, поэтому я не думаю, что df.groupby(['Contract_type', 'ID]).Unit_Weight.sum() сработает.

Вместо этого вы можете попробовать:

df.drop_duplicates(['Contract_type', 'ID']).groupby('Contract_type').Unit_Weight.sum()
0 голосов
/ 29 июня 2018

Я думаю, что нужно:

df1 = (df.drop_duplicates(['Contract_type', 'ID'])
        .set_index('Contract_type')['Unit_Weight']
        .sum(level=0)
        .reset_index())

print (df1)
  Contract_type  Unit_Weight
0         Other          335
1        Type-I          119
2       Type-II          642
3      Type-III          165
4     Part-time          330
5     Full-time          740
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...