[英]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.