У меня есть фрейм данных, где, чтобы избежать имен столбцов кортежей, я намеренно использовал пустые уровни:
>>> df
user1 user2 count
0 1 2
a a b a
0 2 6 0 1 0 0
1 4 6 0 0 0 3
2 21 76 2 0 1 0
3 5 18 0 0 0 0
Обратите внимание, что user1
и user2
находятся на том же уровне, что и count
(побочный эффект слияния).
Я хочу иметь новый столбец (может быть, под count
?), Который принимает сумму, скажем, всех 1
и 2
(0
не включены! ) для каждое письмо Это будет означать:
>>> df
user1 user2 count
0 1 2 sum_1_2
a a b a a b
0 2 6 0 1 0 0 1+0 0
1 4 6 0 0 0 3 0 0+3
2 21 76 2 0 1 0 0 0
3 5 18 0 0 0 0 0 0
Я пробовал df.groupby(level=[0,2]).sum()
, основываясь на этой теме , но они не дают мне желаемых результатов (они включают столбец 0
в сумму, а также сумму * 1022) * и user2
).
КОД ГЕНЕРАТОРА:
df = pd.DataFrame({'user1':[2,4,21,21],'user2':[6,6,76,76],'param1':[1,2,0,1],'param2':['a','a','a','b'],'count':[1,3,2,1]}, columns=['user1','user2','param1','param2','count'])
df = df.set_index(['user1','user2','param1','param2'])
df = df.unstack([2,3]).sort_index(axis=1).reset_index()
df2 = pd.DataFrame({'user1':[2,5,21],'user2':[6,18,76]})
df2.columns = pd.MultiIndex.from_product([df2.columns, [''],['']])
final_df = df2.merge(df, on=['user1','user2'], how='outer').fillna(0)