来自multi groupby的Python新列

时间:2019-11-07 15:55:21

标签: python pandas pandas-groupby

我有一个简化的数据框,可以说:

df = pd.DataFrame({'Letter': ['A', 'B', 'A', 'B','A','B','A','B'], 'T/F': [True, True, False, False,True,False,True,False], 'Number':[5, 6, 7, 8, 9,10,11,12]})

我还有其他一些df2,其中已经有(isAB或isTF)的列。我想要做的是使新列类似于df2.loc [:,'A_True],其平均值为A和True。如果我执行以下操作:

df.groupby(['Letter','T/F'])['Number'].mean()[1::2]

这将输出

Letter  T/F 
A       True    8.333333
B       True    6.000000
Name: Number, dtype: float64

我希望我的df2包含一列仅是8.33333,6的列。是否需要合并?我想节省时间而不是做

 for name,group in df.groupby('Letter'):
     df2.loc[df['Letter']==A,'A_True'] = group.loc[group['T/F'==True],'Number'].mean()

2 个答案:

答案 0 :(得分:1)

您可以先过滤

public interface IDialogService
{
   void ShowDialog(string name, IDialogParameters parameters, Action<IDialogResult> callback);
}

答案 1 :(得分:1)

我们可以使用DataFrame.unstack

new_df=df.groupby(['Letter','T/F'],sort=False).Number.mean().unstack()
print(new_df)

T/F        True   False
Letter                 
A       8.333333    7.0
B       6.000000   10.0

new_df[True]

Letter
A    8.333333
B    6.000000
Name: True, dtype: float64

修改

new_df=df.groupby(['Letter','T/F'],sort=False).Number.mean().unstack().reset_index()
print(new_df)

T/F Letter      True  False
0        A  8.333333    7.0
1        B  6.000000   10.0