[英]Efficient method to split dataframe multiple times in Python?
我目前有一个pandas
DataFrame df
,大小为 168078 行 × 43 列。 df
的摘要如下所示:
doi gender order year ... count
9384155 10.1103/PRL.102.039801 male 1 2009 ... 1
...
3679211 10.1103/PRD.69.024009 male 2 2004 ... 501
df
当前按count
排序,因此从 1 到 501 不等。
我想通过按计数将df
拆分为 501 个较小的子数据。 换句话说,在过程结束时,我将有 501 个不同的 sub df
和每个特征count
数值。
由于生成的(所需)DataFrame 的数量非常多,而且它是定量数据,我想知道是否:
a)可以多次拆分DataFrame(如果是,那么如何),并且
b) 可以对每个 DataFrame 进行定量命名,而无需手动命名 501 次; 即,例如, count == 1
的df
将是df.1
而不必分配它。
您可以做的最佳实践是创建数据框字典。 下面我给大家举个例子:
df=pd.DataFrame({'A':[4,5,6,7,7,5,4,5,6,7],
'count':[1,2,3,4,5,6,7,8,9,10],
'C':['a','b','c','d','e','f','g','h','i','j']})
print(df)
A count C
0 4 1 a
1 5 2 b
2 6 3 c
3 7 4 d
4 7 5 e
5 5 6 f
6 4 7 g
7 5 8 h
8 6 9 i
9 7 10 j
现在我们创建字典。 如您所见,关键是每行中的计数值。 请记住,这里Series.unique
用于在有两行具有相同计数值的情况下,然后它们在同一个字典中创建。
dfs={key:df[df['count']==key] for key in df['count'].unique()}
下面我展示了创建的整个字典的内容以及如何访问它:
for key in dfs:
print(f'dfs[{key}]')
print(dfs[key])
print('-'*50)
dfs[1]
A count C
0 4 1 a
--------------------------------------------------
dfs[2]
A count C
1 5 2 b
--------------------------------------------------
dfs[3]
A count C
2 6 3 c
--------------------------------------------------
dfs[4]
A count C
3 7 4 d
--------------------------------------------------
dfs[5]
A count C
4 7 5 e
--------------------------------------------------
dfs[6]
A count C
5 5 6 f
--------------------------------------------------
dfs[7]
A count C
6 4 7 g
--------------------------------------------------
dfs[8]
A count C
7 5 8 h
--------------------------------------------------
dfs[9]
A count C
8 6 9 i
--------------------------------------------------
dfs[10]
A count C
9 7 10 j
--------------------------------------------------
您可以使用 groupby 来获得如下结果g.groups
:将为每个组提供组名(组 ID) g.get_group
:将为您提供一个具有给定组名的组
import numpy as np
import pandas as pd
df=pd.DataFrame({'A':np.random.choice(["a","b","c", "d"], 10),
'count':np.random.choice(10,10)
})
g = df.groupby("count")
for key in g.groups:
print(g.get_group(key))
print("\n---------------")
结果
A count
3 c 0
---------------
A count
9 a 2
---------------
A count
0 c 3
2 b 3
---------------
A count
1 b 4
5 d 4
6 a 4
7 b 4
---------------
A count
8 c 5
---------------
A count
4 d 8
---------------
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.