Python 使用pandas从多个csv获取的一个字段(列)数据的总和
我有多个像这样的CSV文件 “A.csv” “B.csv” “C.csv” 我希望将天数和pid一起“滑入”,然后将wscore、lscore、wk、wd、lk和ld的平均值一起“滑入” 示例output.csvPython 使用pandas从多个csv获取的一个字段(列)数据的总和,python,csv,Python,Csv,我有多个像这样的CSV文件 “A.csv” “B.csv” “C.csv” 我希望将天数和pid一起“滑入”,然后将wscore、lscore、wk、wd、lk和ld的平均值一起“滑入” 示例output.csv day,pid,wscore,lscore,wk,wd,lk,ld 1,"A,B",1,0,1.5,0.5,0.5,1.5 2,"B,C",2,1.5,2, ... 3,"C",1,2,2, ... 4,"A,B",2,1, ... 5,"A,B,C",2.5, ... ... 我怎
day,pid,wscore,lscore,wk,wd,lk,ld
1,"A,B",1,0,1.5,0.5,0.5,1.5
2,"B,C",2,1.5,2, ...
3,"C",1,2,2, ...
4,"A,B",2,1, ...
5,"A,B,C",2.5, ...
...
我怎样才能做到这一点?
多谢各位
df=pd.concat([A,B,C],axis=0)#A=pd.read_csv('A.csv')
如果在pid
pd.concat([df.groupby(['day'])['pid'].sum(),df.groupby(['day']).mean()],axis=1)
Out[297]:
pid wscore lscore wk wd lk ld
day
1 AB 1.000000 0.000000 1.500000 0.500000 0.500000 1.500000
2 BC 2.000000 1.500000 2.000000 1.000000 1.000000 1.500000
3 C 1.000000 2.000000 2.000000 1.000000 2.000000 2.000000
4 AB 2.000000 1.000000 1.500000 1.000000 1.500000 1.000000
5 ABC 1.666667 1.333333 1.666667 0.666667 0.666667 1.333333
6 A 1.000000 0.000000 2.000000 1.000000 1.000000 2.000000
如果你需要','
pd.concat([df.groupby(['day'])['pid'].apply(lambda x: "%s" % ','.join(x)),df.groupby(['day']).mean()],axis=1)
Out[300]:
pid wscore lscore wk wd lk ld
day
1 A,B 1.000000 0.000000 1.500000 0.500000 0.500000 1.500000
2 B,C 2.000000 1.500000 2.000000 1.000000 1.000000 1.500000
3 C 1.000000 2.000000 2.000000 1.000000 2.000000 2.000000
4 A,B 2.000000 1.000000 1.500000 1.000000 1.500000 1.000000
5 A,B,C 1.666667 1.333333 1.666667 0.666667 0.666667 1.333333
6 A 1.000000 0.000000 2.000000 1.000000 1.000000 2.000000
如果在pid
pd.concat([df.groupby(['day'])['pid'].sum(),df.groupby(['day']).mean()],axis=1)
Out[297]:
pid wscore lscore wk wd lk ld
day
1 AB 1.000000 0.000000 1.500000 0.500000 0.500000 1.500000
2 BC 2.000000 1.500000 2.000000 1.000000 1.000000 1.500000
3 C 1.000000 2.000000 2.000000 1.000000 2.000000 2.000000
4 AB 2.000000 1.000000 1.500000 1.000000 1.500000 1.000000
5 ABC 1.666667 1.333333 1.666667 0.666667 0.666667 1.333333
6 A 1.000000 0.000000 2.000000 1.000000 1.000000 2.000000
如果你需要','
pd.concat([df.groupby(['day'])['pid'].apply(lambda x: "%s" % ','.join(x)),df.groupby(['day']).mean()],axis=1)
Out[300]:
pid wscore lscore wk wd lk ld
day
1 A,B 1.000000 0.000000 1.500000 0.500000 0.500000 1.500000
2 B,C 2.000000 1.500000 2.000000 1.000000 1.000000 1.500000
3 C 1.000000 2.000000 2.000000 1.000000 2.000000 2.000000
4 A,B 2.000000 1.000000 1.500000 1.000000 1.500000 1.000000
5 A,B,C 1.666667 1.333333 1.666667 0.666667 0.666667 1.333333
6 A 1.000000 0.000000 2.000000 1.000000 1.000000 2.000000
您可能想导入文件,然后加入数据帧您可能想导入文件,然后加入
df=pd.concat([A,B,C],axis=0)
这里A,B,C是否定义了csv文件名或“pid”字符串?我添加了一个关于A,B,CI的小说明,有这个代码,()但是它在屏幕截图中给了我以下错误,你有什么解决方案吗?将int改为strdf.id.astype(str)
非常感谢,它可以工作。最后一件事,如果我在A.csv、B.csv、C.csv上再添加两列,假设名称为“win”,并且所有行上的数据为TRUE/FALSE,“place”和数据为string。。我可以用什么方式将3个CSV合并在一起?我尝试使用上面的代码,它不会在输出中显示两个新列。在df=pd.concat([A,B,C],axis=0)
A,B,C在这里定义csv文件名还是“pid”字符串?我添加了一个关于A,B,CI的小说明,有这个代码,(),但它在屏幕截图中给出了以下错误,您有什么解决方案吗?将int改为strdf.id.astype(str)
非常感谢,它可以工作。最后一件事,如果我在A.csv、B.csv、C.csv上再添加两列,假设名称为“win”,并且所有行上的数据为TRUE/FALSE,“place”和数据为string。。我可以用什么方式将3个CSV合并在一起?我尝试使用上面的代码,它不会在输出中同时显示两个新列。
pd.concat([df.groupby(['day'])['pid'].apply(lambda x: "%s" % ','.join(x)),df.groupby(['day']).mean()],axis=1)
Out[300]:
pid wscore lscore wk wd lk ld
day
1 A,B 1.000000 0.000000 1.500000 0.500000 0.500000 1.500000
2 B,C 2.000000 1.500000 2.000000 1.000000 1.000000 1.500000
3 C 1.000000 2.000000 2.000000 1.000000 2.000000 2.000000
4 A,B 2.000000 1.000000 1.500000 1.000000 1.500000 1.000000
5 A,B,C 1.666667 1.333333 1.666667 0.666667 0.666667 1.333333
6 A 1.000000 0.000000 2.000000 1.000000 1.000000 2.000000