所以我有一个数据帧df1,如下所示:
A B C
1 foo 12 California
2 foo 22 California
3 bar 8 Rhode Island
4 bar 32 Rhode Island
5 baz 15 Ohio
6 baz 26 Ohio
Run Code Online (Sandbox Code Playgroud)
我希望按列A进行分组,然后将列B加起来,同时保持列C中的值.这样的事情:
A B C
1 foo 34 California
2 bar 40 Rhode Island
3 baz 41 Ohio
Run Code Online (Sandbox Code Playgroud)
问题是,当我说df.groupby('A').sum()列C被删除返回
B
A
bar 40
baz 41
foo 34
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题并在分组和总结时保留C列?
所以我有一个看起来像这样的数据框:
pd.DataFrame([[1, 10, 14], [1, 12, 14], [1, 20, 12], [1, 25, 12], [2, 18, 12], [2, 30, 14], [2, 4, 12], [2, 10, 14]], columns = ['A', 'B', 'C'])
A B C
0 1 10 14
1 1 12 14
2 1 20 12
3 1 25 12
4 2 18 12
5 2 30 14
6 2 4 12
7 2 10 14
Run Code Online (Sandbox Code Playgroud)
我的目标是获得 B 列的 z 分数,相对于 A 列和 C 列的组。我知道我可以计算每组的均值和标准差
test.groupby(['A', 'C']).mean()
B
A C
1 …Run Code Online (Sandbox Code Playgroud) 因此,我当前有一个目录,我们将其称为/mydir,其中包含 36 个 CSV 文件,每个文件大小为 2.1 GB,且尺寸相同。它们的大小都相同,我想将它们读入 pandas,将它们并排连接在一起(因此行数保持不变),然后将生成的数据帧输出为一个大 csv。我的代码可以组合其中的一些代码,但在某个点之后会出现内存错误。我想知道是否有比我现有的方法更有效的方法。
df = pd.DataFrame()
for file in os.listdir('/mydir'):
df.concat([df, pd.read_csv('/mydir' + file, dtype = 'float)], axis = 1)
df.to_csv('mydir/file.csv')
Run Code Online (Sandbox Code Playgroud)
有人建议我将其分成更小的部分,将文件以 6 个为一组组合,然后依次将它们组合在一起,但我不知道这是否是避免内存错误问题的有效解决方案
编辑:目录视图:
-rw-rw---- 1 m2762 2.1G Jul 11 10:35 2010.csv
-rw-rw---- 1 m2762 2.1G Jul 11 10:32 2001.csv
-rw-rw---- 1 m2762 2.1G Jul 11 10:28 1983.csv
-rw-rw---- 1 m2762 2.1G Jul 11 10:21 2009.csv
-rw-rw---- 1 m2762 2.1G Jul 11 10:21 1991.csv
-rw-rw---- 1 m2762 2.1G Jul 11 10:07 …Run Code Online (Sandbox Code Playgroud) 所以我目前正在开发一个涉及使用主成分分析(PCA)的项目,我试图在运行中学习它.幸运的是,Python有一个非常方便的scikitlearn.decomposition模块,它似乎可以为你完成大部分工作.在我真正开始使用它之前,我正试图弄清楚它正在做什么.
我一直在测试的数据框如下所示:
0 1
0 1 2
1 3 1
2 4 6
3 5 3
Run Code Online (Sandbox Code Playgroud)
当我调用PCA.fit()然后查看我得到的组件时:
array([[ 0.5172843 , 0.85581362],
[ 0.85581362, -0.5172843 ]])
Run Code Online (Sandbox Code Playgroud)
从我对PCA的相当有限的了解,我有点了解这是如何计算的,但是我迷失的地方就是当我打电话给PCA.transform时.这是它给我的输出:
array([[-2.0197033 , -1.40829634],
[-1.84094831, 0.8206152 ],
[ 2.95540408, -0.9099927 ],
[ 0.90524753, 1.49767383]])
Run Code Online (Sandbox Code Playgroud)
有人可能会引导我了解原始数据框和组件的转换方式并将其转换为这个新数组吗?我希望能够理解它所做的确切计算,这样当我扩大规模时,我会更好地了解正在发生的事情.谢谢!
所以说我有一个像这样的pandas数据帧:
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
3 10 11 12
4 13 14 15
5 16 17 18
Run Code Online (Sandbox Code Playgroud)
我想保留每两组的其他组,即最终结果如下所示:
0 1 2
0 1 2 3
1 4 5 6
4 13 14 15
5 16 17 18
Run Code Online (Sandbox Code Playgroud)
我知道如何使用df.iloc [:: 2]获取交替行,但这给了我:
0 1 2
0 1 2 3
2 7 8 9
4 13 14 15
Run Code Online (Sandbox Code Playgroud)
如果有人能指出我在这里正确的方向,不确定是否有可能用iloc这样做,但如果有人能指出我正确的方向,那将是非常感激的