簡體   English   中英

在 Python 中多次拆分 dataframe 的有效方法?

[英]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 == 1df將是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM