如何在Pandas Datafram中迭代计数

2024-04-29 07:49:11 发布

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

我想计算一个值在pandas/python中出现到当前位置的所有时间。必须考虑到一个条件(数字必须出现在“得分”列中才能计算出比赛的结果;如果我从excel文件中读取到数值,则显示为NaN)。在

以下代码是我所在的位置:

import pandas as pd


df = pd.read_excel('G:\Project\SOQ1.xlsx')

df['date'] = pd.to_datetime(df['date'])

df = df.sort(columns='date')

df = df.set_index('date')

def calc_all_count(team_name):  
    home_count = df['home'].value_counts().get(team_name, 0)
    away_count = df['away'].value_counts().get(team_name, 0)
    all_count = home_count + away_count
    return all_count

def calc_home_count(team_name):    
    home_count = df['home'].value_counts().get(team_name, 0)
    return home_count

def calc_away_count(team_name):
    away_count = df['away'].value_counts().get(team_name, 0)
    return away_count

df['hag'] = df['home'].map(calc_all_count)
df['aag'] = df['away'].map(calc_all_count)
df['hahg'] = df['home'].map(calc_home_count)
df['aaag'] = df['away'].map(calc_away_count)

print df


                    league home away  hscore  ascore  hag  aag  hahg  aaag
date                                                                      
2015-01-03 03:02:00    MLB  Cle  Tex       9       6    3   15     2     7
2015-05-10 03:03:00    MLB  Bos  Cle       6       7   16    3     7     1
2015-10-15 03:00:00    MLB  Tex  Bos       5       2   15   16     8     9
2015-10-15 03:30:00    MLB  Tex  Bos       1       6   15   16     8     9
2015-10-16 00:00:00    MLB  Tex  Bos       4       4   15   16     8     9
2015-10-17 03:30:00    MLB  Bos  Tex       2       8   16   15     7     7
2015-10-18 00:00:00    MLB  Tex  Bos       9      10   15   16     8     9
2015-10-20 00:00:00    MLB  Bos  Tex       2       3   16   15     7     7
2015-10-21 00:00:00    MLB  Tex  Bos       5       1   15   16     8     9
2015-10-22 03:00:00    MLB  Tex  Bos       5       3   15   16     8     9
2015-10-23 00:00:00    MLB  Bos  Tex       3       4   16   15     7     7
2015-10-25 23:00:00    MLB  Bos  Tex       6       6   16   15     7     7
2015-10-25 23:00:00    MLB  Bos  Tex       5       1   16   15     7     7
2015-10-26 00:00:00    MLB  Tex  Bos       9       6   15   16     8     9
2015-10-27 01:30:00    MLB  Bos  Tex      10       5   16   15     7     7
2015-10-28 01:00:00    MLB  Tex  Bos     NaN     NaN   15   16     8     9
2015-11-20 03:01:00    MLB  Cle  Bos     NaN     NaN    3   16     2     9

我想要的是每场比赛之前的比赛次数。所以第一个游戏/行的所有数字都应该是0,因为没人玩过。应该是这样的:

^{pr2}$

我怎样才能计算出“之前”现在的位置?我想我应该用.iloc或.ix,但我想不出来。在

任何帮助实现这一点或更好的代码感谢。问这个问题的建议也很受欢迎。在


Tags: namedfhomedatevaluecountcalcnan
1条回答
网友
1楼 · 发布于 2024-04-29 07:49:11

我的方法不使用map,而是使用函数^{}^{}^{}^{}和{a5}:

df.sort_values(by='date', axis=0, inplace = True)
#set helper column for counting cumsum
df['one'] = 1
print df
#                   date league home away  hscore  ascore  one
#5   2015-01-03 03:02:00    MLB  Cle  Tex       9       6    1
#0   2015-05-10 03:03:00    MLB  Bos  Cle       6       7    1
#1   2015-10-15 03:00:00    MLB  Tex  Bos       5       2    1
#2   2015-10-15 03:30:00    MLB  Tex  Bos       1       6    1
#3   2015-10-16 00:00:00    MLB  Tex  Bos       4       4    1
#4   2015-10-17 03:30:00    MLB  Bos  Tex       2       8    1
#6   2015-10-18 00:00:00    MLB  Tex  Bos       9      10    1
#7   2015-10-20 00:00:00    MLB  Bos  Tex       2       3    1
#8   2015-10-21 00:00:00    MLB  Tex  Bos       5       1    1
#9   2015-10-22 03:00:00    MLB  Tex  Bos       5       3    1
#10  2015-10-23 00:00:00    MLB  Bos  Tex       3       4    1
#11  2015-10-25 23:00:00    MLB  Bos  Tex       6       6    1
#12  2015-10-25 23:00:00    MLB  Bos  Tex       5       1    1
#13  2015-10-26 00:00:00    MLB  Tex  Bos       9       6    1
#14  2015-10-27 01:30:00    MLB  Bos  Tex      10       5    1
#15  2015-10-28 01:00:00    MLB  Tex  Bos     NaN     NaN    1
#16  2015-11-20 03:01:00    MLB  Cle  Bos     NaN     NaN    1
^{pr2}$
print df1
                    league home away  hscore  ascore  hag  aag  hahg  aaag
date                                                                      
2015-01-03 03:02:00    MLB  Cle  Tex       9       6    0    0     0     0
2015-05-10 03:03:00    MLB  Bos  Cle       6       7    0    1     0     0
2015-10-15 03:00:00    MLB  Tex  Bos       5       2    1    1     0     0
2015-10-15 03:30:00    MLB  Tex  Bos       1       6    2    2     1     1
2015-10-16 00:00:00    MLB  Tex  Bos       4       4    3    3     2     2
2015-10-17 03:30:00    MLB  Bos  Tex       2       8    4    4     1     1
2015-10-18 00:00:00    MLB  Tex  Bos       9      10    5    5     3     3
2015-10-20 00:00:00    MLB  Bos  Tex       2       3    6    6     2     2
2015-10-21 00:00:00    MLB  Tex  Bos       5       1    7    7     4     4
2015-10-22 03:00:00    MLB  Tex  Bos       5       3    8    8     5     5
2015-10-23 00:00:00    MLB  Bos  Tex       3       4    9    9     3     3
2015-10-25 23:00:00    MLB  Bos  Tex       6       6   10   10     4     4
2015-10-25 23:00:00    MLB  Bos  Tex       5       1   10   10     5     5
2015-10-26 00:00:00    MLB  Tex  Bos       9       6   12   12     6     6
2015-10-27 01:30:00    MLB  Bos  Tex      10       5   13   13     6     6
2015-10-28 01:00:00    MLB  Tex  Bos     NaN     NaN   14   14     7     7
2015-11-20 03:01:00    MLB  Cle  Bos     NaN     NaN    2   15     1     8

相关问题 更多 >