我有一个给定的数据框:
现在从数据帧中可以看出,玩家 x 输了 6 次,玩家 y 输了 9 次。我想制作一个数据框来招募玩家以及他们输了多少次。因此最终的数据帧应该是这样的
我发现的一个选项是使用 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
我的问题是如何使用相同的逻辑按预期输出中显示的玩家姓名输出计数
答案 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