这是我的数据框:
ID Tell Number
0 1 Yes 3
1 1 Yes 6
2 1 No 9
3 2 Yes 4
4 2 Yes 7
5 2 No 8
6 3 Yes 15
7 3 Yes 8
8 3 No 6
9 3 Yes 13
# Creating the dictionary
dic = {'ID': [1,1,1,2,2,2,3,3,3,3], 'Tell': ['Yes', 'Yes', 'No', 'Yes','Yes', 'No','Yes', 'Yes','No', 'Yes'], 'Number': [3,6,9,4,7,8,15,8,6,13]}
# Creating the dataframe
df = pd.DataFrame(dic)
我想创建一个第四列,该列为我提供每个ID的平均值。仅当Tell列为Yes时,该行才用于平均值计算。
因此,我得到的df应该看起来像这样:
ID Tell Number mean
0 1 Yes 3 4.5
1 1 Yes 6 4.5
2 1 No 9 4.5
3 2 Yes 4 5.5
4 2 Yes 7 5.5
5 2 No 8 5.5
6 3 Yes 15 12
7 3 Yes 8 12
8 3 No 6 12
9 3 Yes 13 12
我正在考虑在ID列上进行分组,然后检查Tell列中是否存在Yes或No。我不确定如何实现这一点。
请帮助
答案 0 :(得分:0)
import pandas as pd
# Creating the dictionary
dic = {'ID': [1,1,1,2,2,2,3,3,3,3], 'Tell': ['Yes', 'Yes', 'No', 'Yes','Yes', 'No','Yes', 'Yes','No', 'Yes'], 'Number': [3,6,9,4,7,8,15,8,6,13]}
# Creating the dataframe
df = pd.DataFrame(dic)
df = (pd.merge(left=df, right=df[df.Tell == 'Yes'].groupby('ID')['Number'].mean(), on='ID')
.rename(columns={'Number_x':'Number', 'Number_y':'mean'}))
print(df)
打印:
ID Tell Number mean
0 1 Yes 3 4.5
1 1 Yes 6 4.5
2 1 No 9 4.5
3 2 Yes 4 5.5
4 2 Yes 7 5.5
5 2 No 8 5.5
6 3 Yes 15 12.0
7 3 Yes 8 12.0
8 3 No 6 12.0
9 3 Yes 13 12.0