我有一个DataFrame df
,其中包含有关元素的信息,例如:
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
个相同的df
数据中构建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
最好的方法是什么? (如果可能的话,可以使用Python 2和3的东西)
答案 0 :(得分: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
答案 1 :(得分:1)
df.set_index('group', inplace=True)
dfGroup.set_index('group', inplace=True)
df['valuegroup'] = dfGroup['valuegroup']