Python groupby lambda和填充空行
我有一个数据帧,我试图返回列pass\u count 第一个groupby名称,第二个,检查状态并计算给定名称的通过次数 我的代码:Python groupby lambda和填充空行,python,pandas,Python,Pandas,我有一个数据帧,我试图返回列pass\u count 第一个groupby名称,第二个,检查状态并计算给定名称的通过次数 我的代码: status name date count pass_count pass john 2003-04-22 4 2 fail cici 2003-04-22 4 1 pass john 2004-04-22 4 2 pass john 2004-04
status name date count pass_count
pass john 2003-04-22 4 2
fail cici 2003-04-22 4 1
pass john 2004-04-22 4 2
pass john 2004-04-22 4 2
fail lily 2006-05-23 3 0
lily 2006-05-23 3 0
pass cici 2008-05-23 3 1
cici 2008-05-23 3 0
代码不起作用,我尝试使用fillna('NaN')
或fillna('0')
填充空的“status”行,但空的“status”行仍然存在吗
有人知道如何修复此代码吗?假设您的数据帧还没有
pass\u count
列(如果有,只需使用df.drop('pass\u count',axis=1)
现在,让我们计算通过次数,并将其放入数据帧中:
df['pass_count'] = df.groupby(['name'])['status'].apply(lambda x: x == 'Pass')
我们现在有以下数据帧,每个名称都有正确的计数:
npass = df.groupby('name')['status'].apply(lambda x: len(x[x == 'pass']))
npass = npass.to_frame(name='pass_count').reset_index()
剩下要做的就是合并两个数据帧:
In [127]: npass
Out[127]:
name pass_count
0 cici 1
1 john 3
2 lily 0
在数据帧中有
pass\u count
列。假设您的数据帧还没有pass\u count
列(如果有,只需使用df.drop('pass\u count',axis=1)
现在,让我们计算通过次数,并将其放入数据帧中:
df['pass_count'] = df.groupby(['name'])['status'].apply(lambda x: x == 'Pass')
我们现在有以下数据帧,每个名称都有正确的计数:
npass = df.groupby('name')['status'].apply(lambda x: len(x[x == 'pass']))
npass = npass.to_frame(name='pass_count').reset_index()
剩下要做的就是合并两个数据帧:
In [127]: npass
Out[127]:
name pass_count
0 cici 1
1 john 3
2 lily 0
数据帧中有
pass\u count
列。您的代码缺少transform()
,它返回与原始对象长度相同的数据帧
In [128]: pd.merge(df, npass)
Out[128]:
status name date count pass_count
0 pass john 2003-04-22 4 3
1 pass john 2004-04-22 4 3
2 pass john 2004-04-22 4 3
3 fail cici 2003-04-22 4 1
4 pass cici 2008-05-23 3 1
5 NaN cici 2008-05-23 3 1
6 fail lily 2006-05-23 3 0
7 NaN lily 2006-05-23 3 0
要填充空状态列,您的数据可能包含空格,因此您可以使用:
df['pass_count'] = df.groupby('name')['status'].transform(lambda x: len(x[x == 'pass']))
这将产生:
df['status'].replace(r'^\s+$', np.nan, regex=True,inplace=True)
您的代码缺少
transform()
,它返回与原始对象长度相同的数据帧
In [128]: pd.merge(df, npass)
Out[128]:
status name date count pass_count
0 pass john 2003-04-22 4 3
1 pass john 2004-04-22 4 3
2 pass john 2004-04-22 4 3
3 fail cici 2003-04-22 4 1
4 pass cici 2008-05-23 3 1
5 NaN cici 2008-05-23 3 1
6 fail lily 2006-05-23 3 0
7 NaN lily 2006-05-23 3 0
要填充空状态列,您的数据可能包含空格,因此您可以使用:
df['pass_count'] = df.groupby('name')['status'].transform(lambda x: len(x[x == 'pass']))
这将产生:
df['status'].replace(r'^\s+$', np.nan, regex=True,inplace=True)