- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以,我正在使用一个脚本来计算一个人在行中指定日期之前的日期出现在列表中的次数,并且 1 出现在第 6 列中,并且还计算了一个人出现的次数人员(第 7 列)出现在列表中的日期早于行中指定的日期(注意它们按时间顺序排序。)(使用基于零的列引用)
02/01/2005,Data,Class xpv,4,11yo+,4,1,George Smith
02/01/2005,Data,Class xpv,4,11yo+,4,2,Ted James
02/01/2005,Data,Class xpv,4,11yo+,4,3,Emma Lilly
02/01/2005,Data,Class xpv,4,11yo+,4,5,George Smith
02/01/2005,Data,Class xpv,4,11yo+,6,4,Tom Phillips
03/01/2005,Data,Class tn2,4,10yo+,6,2,Tom Phillips
03/01/2005,Data,Class tn2,4,10yo+,6,5,George Smith
03/01/2005,Data,Class tn2,4,10yo+,6,3,Tom Phillips
03/01/2005,Data,Class tn2,4,10yo+,6,1,Emma Lilly
03/01/2005,Data,Class tn2,4,10yo+,6,6,George Smith
04/01/2005,Data,Class tn2,4,10yo+,6,6,Ted James
04/01/2005,Data,Class tn2,4,10yo+,6,3,Tom Phillips
04/01/2005,Data,Class tn2,4,10yo+,6,2,George Smith
04/01/2005,Data,Class tn2,4,10yo+,6,4,George Smith
04/01/2005,Data,Class tn2,4,10yo+,6,1,George Smith
04/01/2005,Data,Class tn2,4,10yo+,6,5,Tom Phillips
05/01/2005,Data,Class 22zn,2,10yo+,5,3,Emma Lilly
05/01/2005,Data,Class 22zn,2,10yo+,5,1,Ted James
05/01/2005,Data,Class 22zn,2,10yo+,5,2,George Smith
05/01/2005,Data,Class 22zn,2,10yo+,5,4,Emma Lilly
05/01/2005,Data,Class 22zn,2,10yo+,5,5,Tom Phillips
import csv
import datetime
import copy
from collections import defaultdict
with open(r"C:\Temp\test.csv") as i, open(r"C:\Temp\resuls.csv", "wb") as o:
rdr = csv.reader(i)
wrt = csv.writer(o)
data, currdate = defaultdict(lambda:[0, 0, 0, 0]), None
for line in rdr:
date, name = datetime.datetime.strptime(line[0], '%d/%m/%Y'), line[7]
if date != currdate or not currdate:
for v in data.itervalues(): v[:2] = v[2:]
currdate = date
wrt.writerow(line + data[name][:2])
data[name][3] += 1
if line[6] == "1": data[name][2] += 1
02/01/2005,Data,Class xpv,4,11yo+,4,1,George Smith,0,0
02/01/2005,Data,Class xpv,4,11yo+,4,2,Ted James,0,0
02/01/2005,Data,Class xpv,4,11yo+,4,3,Emma Lilly,0,0
02/01/2005,Data,Class xpv,4,11yo+,4,5,George Smith,0,0
02/01/2005,Data,Class xpv,4,11yo+,6,4,Tom Phillips,0,0
03/01/2005,Data,Class tn2,4,10yo+,6,2,Tom Phillips,0,1
03/01/2005,Data,Class tn2,4,10yo+,6,5,George Smith,1,2
03/01/2005,Data,Class tn2,4,10yo+,6,3,Tom Phillips,0,1
03/01/2005,Data,Class tn2,4,10yo+,6,1,Emma Lilly,0,1
03/01/2005,Data,Class tn2,4,10yo+,6,6,George Smith,1,2
04/01/2005,Data,Class tn2,4,10yo+,6,6,Ted James,0,1
04/01/2005,Data,Class tn2,4,10yo+,6,3,Tom Phillips,0,3
04/01/2005,Data,Class tn2,4,10yo+,6,2,George Smith,1,4
04/01/2005,Data,Class tn2,4,10yo+,6,4,George Smith,1,4
04/01/2005,Data,Class tn2,4,10yo+,6,1,George Smith,1,4
04/01/2005,Data,Class tn2,4,10yo+,6,5,Tom Phillips,0,3
05/01/2005,Data,Class 22zn,2,10yo+,5,3,Emma Lilly,1,2
05/01/2005,Data,Class 22zn,2,10yo+,5,1,Ted James,0,2
05/01/2005,Data,Class 22zn,2,10yo+,5,2,George Smith,2,7
05/01/2005,Data,Class 22zn,2,10yo+,5,4,Emma Lilly,1,2
05/01/2005,Data,Class 22zn,2,10yo+,5,5,Tom Phillips,0,5
最终我会想要对生成的百分比数据执行卡方运算。但是现在我想要实现的是能够计算和总结一个唯一数据类(第 2 列)中任何人的分数机会,并将其作为新列附加到 csv。我不确定是否可以编辑我使用过的代码以将其作为一个整体代码来实现。任何关于如何最好地做到这一点的建设性建议或意见将不胜感激。
02/01/2005,Data,Class xpv,4,11yo+,5,1,George Smith,0,0,0
02/01/2005,Data,Class xpv,4,11yo+,5,2,Ted James,0,0,0
02/01/2005,Data,Class xpv,4,11yo+,5,3,Emma Lilly,0,0,0
02/01/2005,Data,Class xpv,4,11yo+,5,5,George Smith,0,0,0
02/01/2005,Data,Class xpv,4,11yo+,5,4,Tom Phillips,0,0,0
03/01/2005,Data,Class tn2,4,10yo+,5,2,Tom Phillips,0,1,0.2, He gets 0.2 because there was a 1 in 5 chance for previous occurrences on dates prior to today. 1/5
03/01/2005,Data,Class tn2,4,10yo+,5,5,George Smith,1,2,0.4, He gets 0.4 because there was a 2 in 5 chance for previous occurrences on dates prior to today. 2/5
03/01/2005,Data,Class tn2,4,10yo+,5,3,Tom Phillips,0,1,0.2
03/01/2005,Data,Class tn2,4,10yo+,5,1,Emma Lilly,0,1,0.2
03/01/2005,Data,Class tn2,4,10yo+,5,6,George Smith,1,2,0.4
04/01/2005,Data,Class tn2,4,10yo+,6,6,Ted James,0,1,0.2
04/01/2005,Data,Class tn2,4,10yo+,6,3,Tom Phillips,0,3,0.6
04/01/2005,Data,Class tn2,4,10yo+,6,2,George Smith,1,4,0.8
04/01/2005,Data,Class tn2,4,10yo+,6,4,George Smith,1,4,0.8
04/01/2005,Data,Class tn2,4,10yo+,6,1,George Smith,1,4,0.8
04/01/2005,Data,Class tn2,4,10yo+,6,5,Tom Phillips,0,3,0.4
05/01/2005,Data,Class 22zn,2,10yo+,5,3,Emma Lilly,1,2,0.4
05/01/2005,Data,Class 22zn,2,10yo+,5,1,Ted James,0,2,0.366666667
05/01/2005,Data,Class 22zn,2,10yo+,5,2,George Smith,2,7,1.3
05/01/2005,Data,Class 22zn,2,10yo+,5,4,Emma Lilly,1,2,0.4
05/01/2005,Data,Class 22zn,2,10yo+,5,5,Tom Phillips,0,5,0.733333333
最佳答案
这不应该是您问题的完整答案(因为您尝试做的事情有点模棱两可),而只是向您展示如何 pandas自然适合这种计算;您还可以按名称而不是索引调用列。
假设您有一个像这样的 test.csv
文件:
date,x0,cls,x1,x2,x3,tag,name
02/01/2005,Data,Class xpv,4,11yo+,4,1,George Smith
02/01/2005,Data,Class xpv,4,11yo+,4,2,Ted James
02/01/2005,Data,Class xpv,4,11yo+,4,3,Emma Lilly
02/01/2005,Data,Class xpv,4,11yo+,4,5,George Smith
...
我为每一列分配了名称。您可以通过
将此文件读入 pandas 数据框import pandas as pd
df = pd.DataFrame.from_csv( 'test.csv', index_col=None )
df
看起来像这样:
date x0 cls x1 x2 x3 tag name
0 02/01/2005 Data Class xpv 4 11yo+ 4 1 George Smith
1 02/01/2005 Data Class xpv 4 11yo+ 4 2 Ted James
2 02/01/2005 Data Class xpv 4 11yo+ 4 3 Emma Lilly
3 02/01/2005 Data Class xpv 4 11yo+ 4 5 George Smith
...
我删除了你不用的列(这只是为了演示,你不必删除这些列)
df.drop( labels=['x0', 'x1', 'x2', 'x3'], axis=1, inplace=True )
现在 df
如下所示:
date cls tag name
0 02/01/2005 Class xpv 1 George Smith
1 02/01/2005 Class xpv 2 Ted James
2 02/01/2005 Class xpv 3 Emma Lilly
3 02/01/2005 Class xpv 5 George Smith
...
假设您要查找每个人在每天之前的日期出现的累计次数:
pv = df.pivot_table( cols='name',
rows='date',
values='tag',
aggfunc=len ).shift( 1 ).fillna( 0 ).cumsum( )
api 文档(请参阅 here)详细描述了每个方法的作用。现在你有了数据透视表 pv
看起来像这样
date Emma Lilly George Smith Ted James Tom Phillips
02/01/2005 0 0 0 0
03/01/2005 1 2 1 1
04/01/2005 2 4 1 3
05/01/2005 2 7 2 5
或者可以使用groupby
:
df.groupby(['date', 'name'])['name'].aggregate(len).unstack( ).shift( 1 ).fillna( 0 ).cumsum( )
要进行相同的计算,但只针对 tag == 1
,您可以这样做
idx = df.tag == 1
pv1 = df[ idx ].pivot_table( cols='name',
rows='date',
values='tag',
aggfunc=len ).shift( 1 ).fillna( 0 ).cumsum( )
或使用groupby
语法:
df[ df.tag == 1 ].groupby(['date', 'name'])['name'].aggregate(len).unstack( ).shift( 1 ).fillna( 0 ).cumsum( )
这将是:
date Emma Lilly George Smith Ted James
02/01/2005 0 0 0
03/01/2005 0 1 0
04/01/2005 1 1 0
05/01/2005 1 2 0
为了填充这两个新列,我们编写了一个辅助函数以在缺少值时回退到 0:
def lookup( pivot_table, col, idx, fall_back=0 ):
try:
return pivot_table[ col ][ idx ]
except KeyError:
return fall_back
df[ 'cnt1' ] = [ lookup( pv1, row[ 'name' ], row[ 'date' ] ) for idx, row in df.iterrows( ) ]
df[ 'cnt' ] = [ lookup( pv, row[ 'name' ], row[ 'date' ] ) for idx, row in df.iterrows( ) ]
我们得到:
date cls tag name cnt1 cnt
0 02/01/2005 Class xpv 1 George Smith 0 0
1 02/01/2005 Class xpv 2 Ted James 0 0
2 02/01/2005 Class xpv 3 Emma Lilly 0 0
3 02/01/2005 Class xpv 5 George Smith 0 0
4 02/01/2005 Class tn2 4 Tom Phillips 0 0
5 03/01/2005 Class tn2 2 Tom Phillips 0 1
6 03/01/2005 Class tn2 5 George Smith 1 2
7 03/01/2005 Class tn2 3 Tom Phillips 0 1
8 03/01/2005 Class tn2 1 Emma Lilly 0 1
9 03/01/2005 Class tn2 6 George Smith 1 2
10 04/01/2005 Class tn2 6 Ted James 0 1
11 04/01/2005 Class tn2 3 Tom Phillips 0 3
12 04/01/2005 Class tn2 2 George Smith 1 4
13 04/01/2005 Class tn2 4 George Smith 1 4
14 04/01/2005 Class tn2 1 George Smith 1 4
15 04/01/2005 Class tn2 5 Tom Phillips 0 3
16 05/01/2005 Class 22zn 3 Emma Lilly 1 2
17 05/01/2005 Class 22zn 1 Ted James 0 2
18 05/01/2005 Class 22zn 2 George Smith 2 7
19 05/01/2005 Class 22zn 4 Emma Lilly 1 2
20 05/01/2005 Class 22zn 5 Tom Phillips 0 5
如果我知道你是如何计算最后一列的,我可以继续。例如,为什么“Tom Phillips”在第 6 行得到 0.2?!
编辑:好的,让我们继续。我们需要找出每个人在每个日期出现的次数;那是另一个数据透视表:
appr = df.pivot_table( cols='name',
rows='date',
values='tag',
aggfunc=len ).fillna( 0 )
或
df.groupby( ['date', 'name'] )['name'].aggregate(len).unstack( ).fillna( 0 )
输出:
date Emma Lilly George Smith Ted James Tom Phillips
02/01/2005 1 2 1 1
03/01/2005 1 2 0 2
04/01/2005 0 3 1 2
05/01/2005 2 1 1 1
以及每个日期有多少人出现:
total_appr = appr.sum( axis=1 )
输出:
date
02/01/2005 5
03/01/2005 5
04/01/2005 6
05/01/2005 5
要计算累积分数,您只需将每一行除以总数,然后移动一个(因为我们查找以前的日期)并计算累积总和:
frac = appr.apply( lambda x: x / total_appr ).shift( 1 ).fillna( 0 ).cumsum( )
df[ 'frac' ] = [ frac[ row[ 'name' ] ][ row[ 'date' ] ] for idx, row in df.iterrows( ) ]
现在 df
如下所示:
date cls tag name cnt1 cnt frac
0 02/01/2005 Class xpv 1 George Smith 0 0 0.000000
1 02/01/2005 Class xpv 2 Ted James 0 0 0.000000
2 02/01/2005 Class xpv 3 Emma Lilly 0 0 0.000000
3 02/01/2005 Class xpv 5 George Smith 0 0 0.000000
4 02/01/2005 Class tn2 4 Tom Phillips 0 0 0.000000
5 03/01/2005 Class tn2 2 Tom Phillips 0 1 0.200000
6 03/01/2005 Class tn2 5 George Smith 1 2 0.400000
7 03/01/2005 Class tn2 3 Tom Phillips 0 1 0.200000
8 03/01/2005 Class tn2 1 Emma Lilly 0 1 0.200000
9 03/01/2005 Class tn2 6 George Smith 1 2 0.400000
10 04/01/2005 Class tn2 6 Ted James 0 1 0.200000
11 04/01/2005 Class tn2 3 Tom Phillips 0 3 0.600000
12 04/01/2005 Class tn2 2 George Smith 1 4 0.800000
13 04/01/2005 Class tn2 4 George Smith 1 4 0.800000
14 04/01/2005 Class tn2 1 George Smith 1 4 0.800000
15 04/01/2005 Class tn2 5 Tom Phillips 0 3 0.600000
16 05/01/2005 Class 22zn 3 Emma Lilly 1 2 0.400000
17 05/01/2005 Class 22zn 1 Ted James 0 2 0.366667
18 05/01/2005 Class 22zn 2 George Smith 2 7 1.300000
19 05/01/2005 Class 22zn 4 Emma Lilly 1 2 0.400000
20 05/01/2005 Class 22zn 5 Tom Phillips 0 5 0.933333
在最后一列的两行中,我的数字与您的数字不同。所以要么是我算错了,要么是你算错了这两个数字。
关于python - 计算用于卡方检验的先前机会图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20135363/
我想填充 3D 等高线图 (contour3(X,Y,Z)),就像 2D 等高线填充图 (contourf(X,Y,Z))。但我无法弄清楚如何实现这一目标。 contour3 和 surf 的组合不是
我有一个 c3.js 折线图,表示 2 个值的演变。我需要折线图的工具提示是饼图(工具提示 = 另一个 c3.js 图形)。 这是我成功的: http://jsfiddle.net/owhxgaqm/
我有具有结构的 Pandas 数据框: A B 0 1 1 1 2 1 2 3 4 3 3 7 4 6 8 如何生成 Seaborn Violin 图,每列作为其自己的单独
我正在使用 D3DXSPRITE 方法将我的 map 图 block 绘制到屏幕上,我刚刚添加了一个缩放功能,当您按住向上箭头时会放大,但注意到您现在可以看到图 block 之间的间隙,这是一些屏幕截
今天我们开始学习目前学习到的最难最复杂的数据结构图。 简单回顾一下之前学习的数据结构,数组、单链表、队列等线性表中数据元素是一对一关系,而树结构中数据元素是一对多关系,而图结构中数据元素则是多对
1、系统环境如下图: 2、为该系统添加一块新的虚拟硬盘,添加后需重启虚拟机,否则系统不识别;如下图,/dev/sdc 是新添加的硬盘; 3、fdisk /dev/sdc为新硬盘创建分区:
1、nagios简介 nagios是一款开源的电脑系统和网络监视工具,能有效监控windows、linux和unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发
越来越多人开始习惯用手机上网,浏览网页、查看邮件···移动化已经成为互联网发展必然趋势,包括facebook在内的很多互联网公司都将移动广告作为下一个淘金地
1.图片处理 1.圆角图片 复制代码 代码如下: /** * 转换成圆角 * &n
Microsoft SQL Server Management Studio是SQL SERVER的客户端工具,相信大家都知道。我不知道大伙使用导入数据的情况怎么样,反正我最近是遇到过。主要是因为没
debian6系统: 首先先安装mysql吧: 打开终端(root)用户登入 apt-get purge mysql-server-5.5 安装完成后: 默认情况下Mysql只允许本地登录
fedora16英文环境下支持中文输入法的方法 fedora16英文环境下支持FCITX的中文输入法: $ im-chooser 就会出现选择界面,选择第二个就行了。
Net预编译命令 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler.exe -? 显示说明 我们需要选择的命令为&n
有的时候电脑出现一些故障有的时候通过将其修改bios设置的方法来解决故障,那么在bios上设置能不能将电脑恢复出厂设置呢?其实也是可以的。方法也很简单的,只要会进入电脑的bios懂的上面英文的意思就
笔者曾介绍过Deepin 将对龙芯进行全面支持,打造最优美龙芯电脑桌面。现在Deepin团队移植工作取得了突破性的成果,Deepin桌面已经在龙芯3A和龙芯3B电脑上成功运行起来了。 以下为龙芯3
在安装一些软件之后,我们的电脑总是会发生一点小变化,不是桌面上多了几个网址图标,就是IE浏览器的默认主页被篡改成乱七八糟的网址。最可气的是,在IE设置中将默认主页改回来后,下次启动Win7后又变了回
“注册表编辑器怎么打开”虽说不是很难的问题,但是对于对电脑常识不是很擅长的网民来说,当电脑出现问题或需要更改设置时,着实还是件头疼的问题。因为需要打开注册表进行操作解决。那么如何打开注册表编辑器呢?
这篇文章重点介绍10个重要的WordPress安全插件和技巧,用来保护WordPress网站或者博客。 1. WP Security 人工帮助你修复被黑客入侵的网站,只要按照他们网站上的联系电话
其实运用object和javascript调用外部文件,也能实现不同栏目调用不同友情链接,即相当于调用不同栏目友情链接文件, {dede:field.typeid/}来获取当前栏目的ID。
我有一个复值矩阵。 如果我发出命令: plot(myMatrix) 然后它在图形设备上显示一种散点图,X 轴标记为 Re(myMatrix),Y 轴标记为 Im(myMatrix)。这显示了我正在寻找
我是一名优秀的程序员,十分优秀!