使用python筛选/迭代列中的每个项

使用python筛选/迭代列中的每个项,python,pandas,Python,Pandas,我有一个数据框架 inputfile UserId UserGroup status 0 samlefile1 user1@gmail.com xyz pass 1 testfile user2@gmail.com abc pass 2 example user3@gmail.com xyz pass 3 example user3@gmail.com xyz

我有一个数据框架

    inputfile           UserId UserGroup   status
0  samlefile1  user1@gmail.com       xyz    pass
1    testfile  user2@gmail.com       abc    pass 
2     example  user3@gmail.com       xyz    pass
3     example  user3@gmail.com       xyz    fail
因此,我尝试选择“inputfile”列中的每个项,并检查它在“status”列中被传递了多少次,然后转换为json“numberOfTimesSuccess”:1

{inputfile:samplefile1, UserId:user1@gmail.com, UserGroup:xyz, status:pass, numberofTimesuccess:1}
{inputfile:testfile, UserId:user2@gmail.com, UserGroup:xyz, status:pass, numberofTimesuccess:1}
{inputfile:example, UserId:user3@gmail.com, UserGroup:xyz, status:pass, numberofTimesuccess:1}
{inputfile:example2,UserId:user3@gmail.com,用户组:xyz,状态:,,NumberOfTimesSuccess:1}

以下是我的python代码:

filt = df['inputfile'] = 'samplefile1'
success = df[filt]['status'].str.contains('pass').sum
newdict={}
newdict['numberOfTimesSuccess'] = success

output: 
{numberOfTimesSuccess : 1 }

我只为一列中的一项获取输出,但我希望为一列中的所有项获取输出,并将其转换为json。

首先,您需要计算每个
输入文件的成功次数,然后将其与基本数据帧合并。然后使用
df.to_json
orient='records'
将每一行转换为json

import json
df = pd.DataFrame([
    ['samlefile1','user1@gmail.com', 'xyz' ,'pass'],
    ['samlefile1','user5@gmail.com', 'xyz' ,'pass'],
    ['samlefile1','user6@gmail.com', 'xyz' ,'pass'],
    ['testfile','user2@gmail.com', 'abc' ,'pass'],
    ['example','user3@gmail.com', 'xyz' ,'pass'],
    ['example','user3@gmail.com', 'xyz' ,'fail']],columns = ['InputFile','UserId', 'UserGroup' ,'status']
)

#Count no of status per filename
Input_status_count = df.groupby(['InputFile']).agg(success_count=('status', lambda x: x[x == 'pass'].count()),
                                                   fail_count=('status', lambda x: x[x == 'fail'].count()))

#Merge the 2 files on 'InputFile' column
FinalDF = pd.merge(df, Input_status_count,on = "InputFile" )
JSON_String = FinalDF.to_json(orient='records')
JSON_String
输出:

[
    {"InputFile":"samlefile1","UserId":"user1@gmail.com","UserGroup":"xyz","status":"pass","success_count":3,"fail_count":0},
    {"InputFile":"samlefile1","UserId":"user5@gmail.com","UserGroup":"xyz","status":"pass","success_count":3,"fail_count":0},
    {"InputFile":"samlefile1","UserId":"user6@gmail.com","UserGroup":"xyz","status":"pass","success_count":3,"fail_count":0},
    {"InputFile":"testfile","UserId":"user2@gmail.com","UserGroup":"abc","status":"pass","success_count":1,"fail_count":0},
    {"InputFile":"example","UserId":"user3@gmail.com","UserGroup":"xyz","status":"pass","success_count":1,"fail_count":1},
    {"InputFile":"example","UserId":"user3@gmail.com","UserGroup":"xyz","status":"fail","success_count":1,"fail_count":1}
]

谢谢@venky_u2;,但我不想替换status的值,而是想在数据框“noofsuccess”:3和“nooffailed”:1中添加两个新列。我注意到失败的行不会出现在数据帧中。另外,如果status列为null,则该行应出现在dataframe和noofsuccess中:0。提前谢谢,@KRISHNACHAITANYARYALI我已经更新了我的代码,让我知道这是否是你所期望的!你让我过得更好。再次感谢@venky\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu@venky\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。感谢advanceI再次测试,代码工作正常。此外,我可能每天都有空,也可能没有空,而且社区规模很大,所以最好向更广泛的群体询问。