Python groupby lambda和填充空行

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

我有一个数据帧,我试图返回列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-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)