Pandas根据另一列的条件计算一列的事物

2024-04-24 05:54:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个围棋游戏的数据帧。重要的栏目是球员姓名,以及他们是否赢得了这场比赛。我如何创建一个新的数据框,其中包含一列球员姓名(不重复姓名)、他们玩过的游戏总数和他们赢过的总数。例如:

import pandas as pd

d = {'Nombres': ['pepe','tito','pepe','pepe'], 'col2': ['Win','Lost','Win','Lost']}
df2 = pd.DataFrame(data=d)

这就是我目前所做的,计算每个用户玩的游戏数量:

df3 = df2.groupby(['Jugador']).size().reset_index(name='count')

如何添加每个玩家赢得多少场比赛的列


Tags: 数据import游戏pandasaswinpd姓名
2条回答

几种方法(可以随意添加更多)

一,

df2.groupby(['Nombres','col2'])['col2'].count().to_frame()
              col2
Nombres col2      
pepe    Lost     1
        Win      2
tito    Lost     1

二,

pd.crosstab(df2.Nombres,df2.col2,df2.col2,aggfunc='count').fillna(0)
col2     Lost  Win
Nombres           
pepe      1.0  2.0
tito      1.0  0.0

三,

df2.loc[df2['col2'] == 'Win']['Nombres'].value_counts()
pepe    2
Name: Nombres, dtype: int64

四,

df2.loc[df2['col2'] == 'Win'].groupby('Nombres').size()
Nombres
pepe    2
dtype: int64

五,

df2['win_counter'] = df2.groupby('Nombres')['col2'].apply(lambda x : x.eq('Win').cumsum())
print(df2)
     Nombres  col2    win_counter
0    pepe     Win              1
1    tito     Lost             0
2    pepe     Win              2
3    pepe     Lost             2

IIUC,^{}

new_df = (df2.pivot_table(index = 'Nombres',columns = 'col2',
                          values = 'col2',
                          aggfunc = 'size',
                          fill_value = 0)
            #.loc[:,['Win']] #if you want drop the column of Lost
             .assign(Total_Match=lambda x: x.sum(axis=1))
             .rename_axis(columns = None)
             .reset_index())
print(new_df)

输出

  Nombres  Lost  Win  Total_Match
0    pepe     1    2            3
1    tito     1    0            1

相关问题 更多 >