/ / 1つの列をグループ化してパンダの他の列には何もしないのですか? - python、pandas、pandas-groupby

ある列を悩ませて、パンダの他の列には何もしませんか? - python、pandas、pandas-groupby

私はこのようなデータフレームを持っています:

  a  b  c  d
0 1  1  1  1
1 1  2  2  2
2 1  3  3  3
3 1  4  4  4
4 2  1  1  1
5 2  2  2  2
6 2  3  3  3

どのように "a"でグループ化し、列b c dに何もしないで、いくつかのデータフレームに分割するにはどうすればいいですか?このような: 最初のグループ列 "a":

  a  b  c  d
0 1  1  1  1
1    2  2  2
2    3  3  3
3    4  4  4
4 2  1  1  1
5    2  2  2
6    3  3  3

そして、 "a"の数に基づいて異なるデータフレームに分割します。

dataframe 1:

a  b  c  d
0 1  1  1  1
1    2  2  2
2    3  3  3
3    4  4  4
dataframe 2:
a  b  c  d
0 2  1  1  1
1    2  2  2
2    3  3  3
:
:
:
dataframe n:
a  b  c  d
0 n  1  1  1
1    2  2  2
2    3  3  3

回答:

回答№1は2

各グループを繰り返します df.groupby 戻る。

for _, g in df.groupby("a"):
print(g, "n")

a  b  c  d
0  1  1  1  1
1  1  2  2  2
2  1  3  3  3
3  1  4  4  4

a  b  c  d
4  2  1  1  1
5  2  2  2  2
6  2  3  3  3

あなたがデータフレームの辞書が欲しいならば、私は推薦する:

df_dict = {idx : g for idx, g in df.groupby("a")}

ここに、 idx ユニークです a 値。


いくつかの気の利いたテクニック礼儀 ルート

df_dict = dict(list(df.groupby("a")))  # for a dictionary

そして、

idxs, dfs = zip(*df.groupby("a"))       # separate lists
idxs
(1, 2)

dfs
(   a  b  c  d
0  1  1  1  1
1  1  2  2  2
2  1  3  3  3
3  1  4  4  4,    a  b  c  d
4  2  1  1  1
5  2  2  2  2
6  2  3  3  3)

回答№2の場合は1

これはを使用して方法です np.split

idx=df.a.diff().fillna(0).nonzero()[0]
dfs = np.split(df, idx, axis=0)

dfs
Out[210]:
[   a  b  c  d
0  1  1  1  1
1  1  2  2  2
2  1  3  3  3
3  1  4  4  4,    a  b  c  d
4  2  1  1  1
5  2  2  2  2
6  2  3  3  3]
dfs[0]
Out[211]:
a  b  c  d
0  1  1  1  1
1  1  2  2  2
2  1  3  3  3
3  1  4  4  4