使用 df.apply 返回满足条件的行数

时间:2021-06-05 07:14:12

标签: python pandas dataframe

我有一个给定的数据框:

Initial Dataframe

现在从数据帧中可以看出,玩家 x 输了 6 次,玩家 y 输了 9 次。我想制作一个数据框来招募玩家以及他们输了多少次。因此最终的数据帧应该是这样的

Final Dataframe

我发现的一个选项是使用 dataframe.apply,其中我可以返回保持条件的行数。相同的代码是:

import pandas as pd

df=pd.read_csv('C:/Users/sadik/Desktop/Data.csv')

df = df.apply(lambda x : True
            if x['Result'] == "Lost" else False, axis = 1)
num_rows = len(df[df == True].index)
print('Number of Rows in dataframe in which Condition is met: ',
      num_rows )

这给了我输出

runfile('C:/Users/sadik/untitled0.py', wdir='C:/Users/sadik')
Number of Rows in dataframe in which Condition is met:  15

我的问题是如何使用相同的逻辑按预期输出中显示的玩家姓名输出计数

2 个答案:

答案 0 :(得分:1)

您可以只使用 groupby

import pandas as pd
df = pd.DataFrame({"name": ['x'] * 6 + ['y'] * 9, 'result': ['LOST'] * 15})


df.groupby('name').count()
>>>
    result
name    
x   6
y   9

如果您想使用 apply,您也可以这样做:

df.groupby('name')[['result']].apply(lambda x: x.count())

答案 1 :(得分:1)

您可以按 Name 分组,然后agg计算 Lost 的总数:

out = df.groupby("Name").Result.agg(lambda s: s.eq("Lost").sum()).to_frame("Count")

我们最后将其转换为具有名为 "Count" 的计数的数据框,

得到

>>> out

      Count
Name
x         6
y         9