Pandas 计算 2 列中的值对,条件在第三列

Pandas counting pairs of values from 2 columns with condition on the third

我有一个包含三列的数据集:用户名、计算机、Success/Failure。

我想统计有多少个相似的Username+Computer 对,其中第三列是Success。 我希望结果是一个包含 1 列的数据集,如果原始数据集中的第三列是 Failure,则结果中的同一列将包含 0。 结果 table 必须包含与原始 table.

相同的行数

例如:

原始数据集:

User Computer Success or Failure
admin DC Success
admin DC Success
admin DC Fail
admin Server Success
admin Server Fail
User Computer Success
User Computer Success
User Computer Fail

结果:

No Count
1 2
2 2
3 0
4 1
5 0
6 2
7 2
8 0

所有失败的行都不计算在内,在结果中用0填充。

我正在使用 pandas 在 python 中编程。我可以使用 tolist() 方法执行此操作,然后使用简单的 for 循环和条件创建一个新列表,但我正在寻找一种使用 pandas 内置方法来执行此操作的方法,以节省内存和时间。

非常感谢!

这是使用 tolist 方法的代码:

result = [user_and_computer = [list(x) for x in list(zip(df["user"].tolist(),df["computer"].tolist(),df["is_success"].tolist()))]
for logon in user_and computer:
    if is_success:
         result.append(user_and_computer.count(logon))
    else:
         result.append(0)

尝试:

df["Count"] = df.groupby(["User", "Computer"])["Success or Failure"].transform(
    lambda x: x.eq("Success").sum()
)
df.loc[df["Success or Failure"] != "Success", "Count"] = 0
print(df)

打印:

    User  Computer Success or Failure  Count
0  admin        DC            Success      2
1  admin        DC            Success      2
2  admin        DC               Fail      0
3  admin    Server            Success      1
4  admin    Server               Fail      0
5   User  Computer            Success      2
6   User  Computer            Success      2
7   User  Computer               Fail      0

首先创建一个布尔掩码来查找值为 Success 的行,然后将此掩码与 UserComputer 列一起分组并通过求和转换得到结果

m = df['Success or Failure'].eq('Success')
df['count'] = m.groupby([df['User'], df['Computer'], m]).transform('sum')

    User  Computer Success or Failure  count
0  admin        DC            Success      2
1  admin        DC            Success      2
2  admin        DC               Fail      0
3  admin    Server            Success      1
4  admin    Server               Fail      0
5   User  Computer            Success      2
6   User  Computer            Success      2
7   User  Computer               Fail      0