Pandas 计算 2 列中的值对,并以第三列为条件
我有一个包含三列的数据集:用户名、计算机、成功/失败。
我想计算有多少个相似的用户名+计算机对,其中第三列是成功。 我希望结果是一个包含 1 列的数据集,如果原始数据集中的第三列为 Failure,则结果中的同一列将包含 0。 结果表必须包含与原始表相同数量的行。
例如:
原始数据集:
用户 | 计算机 | 成功或失败 |
---|---|---|
admin | DC | 成功 |
admin | DC | 成功 |
admin | DC | 失败 |
admin | 服务器 | 成功 |
admin | 服务器 | 失败 |
用户 | 计算机 | 成功 |
用户 | 计算机 | 成功 |
用户 | 计算机 | 失败 |
结果:
无 | 计数 |
---|---|
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)
I have a dataset with three columns: Username, Computer, Success/Failure.
I want to count how many similar Username+Computer pairs are, where the third column is Success.
I want the result to be a dataset with 1 column, and if the third column from the original dataset is Failure, the same column in the result will contain 0.
The result table must contain the same amount of rows as the original table.
For example:
The original dataset:
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 |
The result:
No | Count |
---|---|
1 | 2 |
2 | 2 |
3 | 0 |
4 | 1 |
5 | 0 |
6 | 2 |
7 | 2 |
8 | 0 |
All of the rows that is failed are not counted and they are filled with 0 in the result.
I am programming in python using pandas. I could do this using the tolist() method and then creating a new list, with a simple for loop and a condition, but I am looking for a way to do this with pandas builtin methods to save memory and time.
Thank you very much!
Here's the code with the tolist method:
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)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先创建一个布尔掩码来查找值为
Success
的行,然后将此掩码本身与User
和Computer
列分组并进行转换用 sum 得到结果First create a boolean mask to find the rows where the value is
Success
, then group this mask by itself along withUser
andComputer
columns and transform with sum to get the result尝试:
打印:
Try:
Prints: