2017-12-03 2 views
1

GROUPBY 후 팬더 DataFrame 데이터를 다시 가져 오기 :예를 들어, 내가 요소에 대한 정보와 DataFrame <code>df</code>이

df = pd.DataFrame([[1,45,12],[1,8,13],[1,3,4],[2,5,1],[2,7,3]], 
        columns=['group', 'value1', 'value2']) 

나는 dfGroups = df.groupby('group').apply(my_agg).reset_index() 같은 것을 사용하고, 그래서 지금은 dfgroup이, 말

dfGroup = pd.DataFrame([[1,4],[2,27]], 
         columns=['group', 'valuegroup']) 

이제 요소 데이터와 그룹 데이터를 고려하여 새 열을 작성할 수 있도록 요소에 그룹 정보를 가져와야합니다. 간단하게하기 위해 valuegroup 열을 과 동일한 dfGroup 데이터에 작성해야한다고 가정 해 봅시다. 그래서 얻을 수

group value1 value2 valuegroup 
0 1  45  12  4 
1 1  8  13  4 
2 1  3  4  4 
3 2  5  1  27 
4 2  7  3  27 

어떻게하는 것이 가장 좋습니까? (파이썬 2와 3으로 일하는 것이 가능하다면, 뭔가)

답변

1

난 당신이 transform 필요하다고 생각 :

df['new'] = df.groupby('group')['value'].transform(my_agg) 

또는 merge :

df = pd.merge(df, dfGroup, on='group', how='left') 
print (df) 
    group value1 value2 valuegroup 
0  1  45  12   4 
1  1  8  13   4 
2  1  3  4   4 
3  2  5  1   27 
4  2  7  3   27 

또는 생략하면 reset_index이 가능한 사용 join 수 있습니다 :

dfGroups = df.groupby('group').apply(my_agg) 
df = df.join(dfGroups, on='group') 

샘플 :

dfGroup = pd.DataFrame([4,27], 
         columns=['valuegroup'], index=[1,2]) 

print (dfGroup) 
    valuegroup 
1   4 
2   27 

df = df.join(dfGroup, on='group') 
print (df) 
    group value1 value2 valuegroup 
0  1  45  12   4 
1  1  8  13   4 
2  1  3  4   4 
3  2  5  1   27 
4  2  7  3   27 
+0

환상적인, 상세한 답변을 주셔서 감사합니다! 나는 이것을 승인하고 있는데 실제로 dt 그룹의 여러 컬럼이 필요하기 때문에 join을 사용할 것이기 때문에 cstainbrook의 솔루션보다 사용하기가 더 쉽다. – Matt

+0

고맙습니다. – jezrael

1
df.set_index('group', inplace=True) 
dfGroup.set_index('group', inplace=True) 
df['valuegroup'] = dfGroup['valuegroup'] 
+0

완벽하게 작동합니다. 감사합니다! :) – Matt