簡體   English   中英

pandas數據幀組由多行組成

[英]pandas dataframe groupby a number of rows

如果你有一個pandas DataFrame({'a':[1,2,3,4,5,6,7,8,9]})有沒有一種簡單的方法將它分成3組或任何數字組?

我知道這可以通過添加一個包含允許分組的值的額外列來完成,例如,您可以將上面的DataFrame連接到[1,1,1,2,2,2,3,3,3]並添加groupby柱。 但似乎沒有必要為此操作添加額外的列。

此外,我可以創建一個索引數組np.linspace(0,9,4)並使用它們作為DataFrame.ix []的參數循環數組值,但對於大型DataFrame來說似乎並不快。

我錯過了一個更簡單的方法嗎?

== ==解決方案

從下面的答案我的首選解決方案是使用numpy.array_split (如果不像numpy.split那樣進行不等分,它不會引發異常),你也可以傳遞一個索引數組來分割而不是結果的數量件想要的。 使用下面的行,您可以將DataFrame(df)拆分為x行的較小DataFrame

split_df = np.array_split(df, np.arange(0, len(df),x))

split_df是一個列表,其中第一個對象是空的numpy數組,以下對象是拆分的DataFrame。

根據您的示例DataFrame

In [25]: df.index/3
Out[25]: Int64Index([0, 0, 0, 1, 1, 1, 2, 2, 2], dtype=int64)

In [26]: for k,g in df.groupby(df.index/3):
    ...:     print k,g
    ...:     
0    a
0  1
1  2
2  3
1    a
3  4
4  5
5  6
2    a
6  7
7  8
8  9

這是使用numpy.splitnumpy.array_split另一種方法:

df = pd.DataFrame({"A":np.arange(9), "B":np.arange(10, 19)}, 
                  index=np.arange(100, 109))
for tmp in np.split(df, 3):
    print tmp

輸出是:

     A   B
100  0  10
101  1  11
102  2  12
     A   B
103  3  13
104  4  14
105  5  15
     A   B
106  6  16
107  7  17
108  8  18

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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