在Python中多次拆分数据帧的有效方法?
我目前有一个在Python中多次拆分数据帧的有效方法?,python,pandas,dataframe,Python,Pandas,Dataframe,我目前有一个pandasDataFramedf,大小为168078行×43列。df的摘要如下所示: doi gender order year ... count 9384155 10.1103/PRL.102.039801 male 1 2009 ... 1 ... 3679211
pandas
DataFramedf
,大小为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个不同的子df
,每个特征count
值
由于生成的(期望的)数据帧的数量相当高,而且是定量数据,我想知道:
a) 可以多次拆分数据帧(如果是,那么如何拆分),以及
b) 可以对每个数据帧进行定量命名,而无需手动分配501次名称;i、 例如,
df
与count==1
将是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
现在我们创建字典。如您所见,键是每行中count的值。 请记住,此处用于在有两行具有相同计数值的情况下,在同一字典中创建它们
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
--------------------------------------------------
您可以做的最佳实践是创建数据帧字典。下面我向您展示一个示例:
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
现在我们创建字典。如您所见,键是每行中count的值。 请记住,此处用于在有两行具有相同计数值的情况下,在同一字典中创建它们
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
:将为您提供一个具有给定组名的组
将numpy导入为np
作为pd进口熊猫
df=pd.DataFrame({'A':np.random.choice([“A”、“b”、“c”、“d”]),10),
“计数”:np.随机选择(10,10)
})
g=df.groupby(“计数”)
对于g组中的键:
打印(g.get_组(键))
打印(“\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
---------------
您可以使用groupby获得如下结果 在这里
g.groups
:将为每个组提供组名(组id)
g.get_group
:将为您提供一个具有给定组名的组
将numpy导入为np
作为pd进口熊猫
df=pd.DataFrame({'A':np.random.choice([“A”、“b”、“c”、“d”]),10),
“计数”:np.随机选择(10,10)
})
g=df.groupby(“计数”)
对于g组中的键:
打印(g.get_组(键))
打印(“\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
---------------