私はこのようなデータフレームを持っています:
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