如何在 Pandas Dataframe 中迭代计数

2023-12-03

我想计算直到 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,因为还没有人玩。应该看起来像这样:

                    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   11   11     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   14     1     7

我怎样才能构建计算“之前”当前位置的结构?我想我应该使用 .iloc 或 .ix 但我不明白。

对于实现此目标或更好的代码的任何帮助表示赞赏。提出问题的技巧也更值得赞赏。


我的方法不使用map,但函数stack, groupby, pivot_table, merge and cumsum:

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
#set columns home and away to one columns for cumsum
df2 = df[['date', 'home', 'away', 'one']].set_index(['date', 'one'])
df2 = df2.stack().reset_index(name="both")
df2['new'] =  df2.groupby(['both'])['one'].cumsum() - 1
#print df2

#get back to original index
df1 = pd.pivot_table(df2, index=['date'], columns=['level_2'], values='new').reset_index()
#print df1

#merge with original df
df1 = pd.merge(df, df1, on=['date'], suffixes=('', '_new'))

#rename and casr float columns to integers columns
df1 = df1.rename(columns={'away_new':'aag', 'home_new':'hag',})
df1['aag'] = df1['aag'].astype(int)
df1['hag'] = df1['hag'].astype(int)

#count aaag and hahg
df1['aaag'] =  df1.groupby(['away'])['one'].cumsum() - 1
df1['hahg'] =  df1.groupby(['home'])['one'].cumsum() - 1

#drop helper column one and set index
df1 = df1.drop(['one'], axis=1 ).set_index('date')
#reorder columns
df1 = df1[['league', 'home', 'away', 'hscore', 'ascore', 'hag', 'aag', 'hahg', 'aaag']]
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Pandas Dataframe 中迭代计数 的相关文章

随机推荐

  • Common Lisp 的复制树:哪些对象将被原始对象和副本共同引用?

    我正在阅读实用 Common Lisp 并且有一个关于 Lisp 的问题COPY TREE功能 书上给出了调用的例子 copy tree 1 2 3 4 5 6 书上解释完之后 是这么说的 如果原始内容中的 cons 单元格引用了原子值 则
  • window.focus() 在 Google Chrome 中不起作用

    只是想知道 Google Chrome 是否会支持window focus 在某一点 当我说支持时 我的意思是让它发挥作用 对它的调用不会失败 它只是不执行任何操作 所有其他主流浏览器都不存在此问题 FireFox IE6 IE8 和 Sa
  • 如何检查字符串是否是唯一标识符?

    uniqueidentifier SQL Server 是否有与 IsDate 或 IsNumeric 等效的函数 或者有什么相当于 C TryParse 的东西吗 否则我将不得不编写自己的函数 但我想确保我没有重新发明轮子 我试图涵盖的场
  • 如何按修改日期列出 Amazon S3 存储桶内容?

    大多数时候 我们会将文件加载到公共 S3 存储桶中 因此很难找出其中的数据 如何查看在特定日期上传的对象 一种解决方案可能会使用s3api 如果您的对象少于 1000 个 那么它很容易工作 否则您需要使用分页 s3api可以列出所有对象并具
  • 我可以在 cmake 时获取 CMake 为特定 vcproj 生成的 GUID 吗?

    前言 我正在尝试将我的 C csproj 与我们的 C 和 C CLI 代码库 cmake 构建的其余部分集成 我收到了反对尝试这样做的建议 因为 CMake 不能与 Visual Studio 中的 NET 很好地协作 但在实现一些自定义
  • 如何在 Postgres 兼容模式下使用 H2 作为嵌入式数据库,来自 jruby/rails

    我想启动一个 jruby rails 应用程序来使用 Postgres 但我想在开发和测试中运行时在 Postgres 兼容模式下使用 H2 在 H2 或 postgresql 中启动应用程序没有问题 但如何配置使用嵌入式 H2 数据库运行
  • 在 Bootstrap 模式中定位一个元素

    我编写了这段代码 以便当用户位于密码文本框时 他 她可以按 Enter 登录 但是 我认为因为它位于引导模式中 所以我无法使用 jQuery 选择器来定位它 任何想法 这是 HTML div class modal content div
  • Java中有生成随机字符的功能吗?

    Java有生成随机字符或字符串的功能吗 或者必须简单地选择一个随机整数并将该整数转换为ASCII代码到字符 要生成 a z 中的随机字符 Random r new Random char c char r nextInt 26 a
  • 错误:无法启动守护进程:

    错误 无法启动守护进程 无法保留足够的空间 对象堆的空间 请在项目的 Gradle 中分配更多内存gradle properties file 例如 下面的行 在gradle properties文件中 将最大 Java 堆大小设置为 1
  • iPhone:仅在横向模式下,第一次 addSubview 后,UITableViewController 无法正确旋转

    一个最小的说明性 Xcode 项目可以在github 在我的 UIWindow 上 当我添加第二个 及后续 UITableView 作为子视图时 它们无法正确旋转 因此会出现在侧面 这仅在模拟器中进行了测试 这是给您的一些代码 void a
  • Fortran 2003 中的内在赋值和多态性

    我尝试添加一个过程该模块 写者 弗拉基米尔F 它在 Fortran 2003 中实现了一个通用链表 为了方便起见 我希望能够将列表的内容作为数组输出 因此我将以下过程添加到名为的文件中的列表模块中lists f90 subroutine l
  • 使用参数插入多行 Sql Server

    我试图弄清楚是否有一种方法可以在使用参数的同时在 Sql Server 中执行多个值插入 准确地说 有这样的命令 com new SqlCommand insert into myTable values recID tagID con c
  • 量子谐振子/SHM 建模

    我需要帮助来弄清楚为什么我的 b 基态图看起来错误 这是完整的问题 我认为完整发布它将为我尝试使用的方法提供上下文 a 考虑在两个无限高的壁之间有一个方形势井 其 0 间隔距离 等于玻尔半径 即对于区间 0 中的所有 x 写一个函数solv
  • 如何制作带有标志的语言选择器按钮? (html + js)[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 我正在尝试使用 HTML 和 JS 中的标志制作一个语言选择器按钮 但我得到的结果与我在此处找到的示例不匹配 https codepen io brapastor pen B
  • 检测 R 中的操作系统(例如,对于自适应 .Rprofile 文件)

    我想知道如何自动检测 R 中的操作系统 例如将内容放入 Rprofile 中 switch Sys info sysname Windows print I m a Windows PC Linux print I m a penguin
  • 滚动后列表视图的选中项不存在

    我创建了一个带有文本视图和复选框的列表视图 但是 向下 或向上 滚动列表后 列表中所有选中的项目都将被取消选择 如何使选中的复选框在滚动后保持其状态 ListView 每次滚动时都会回收视图 这就是复选框不保留其状态的原因 为了完成你的任务
  • 参数未传递到 rich:popupPanel 和 t:dataList 下的 h:commandLink 的支持 bean

    我有 rich popupPanel 其中 t dataTable 的一列下包含 t dataList 该 dataList 有 h commandLink 其中有 f param 它在 richfaces 3 3 上运行良好 但在迁移到
  • RxJava 1 和 RxJava 2 在同一项目中[重复]

    这个问题在这里已经有答案了 我们的项目使用 RxJava 1 compile io reactivex rxjava 1 1 6 我们使用一个内部使用 RxJava 2 的库 compile io reactivex rxjava2 rxj
  • “是一个字段,并且像类型一样使用”错误

    我正在尝试使用StringBuilder在 C 类库项目中 我已经添加了using声明和所有 我没有得到智能感知 并且收到编译错误 Eg StringBuilder sb new StringBuilder sb Append 我发现变量有
  • 如何在 Pandas Dataframe 中迭代计数

    我想计算直到 pandas python 中当前位置出现一个值的所有次数 必须考虑一个条件 数字必须出现在 分数 列中才能计算已玩的游戏 如果我读取的 Excel 文件中没有值 则显示为 NaN 下面的代码是我所在的位置 import pa