Mam taką ramkę danych:
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
Jak pogrupować "a" i nic nie zrobić w kolumnie b c d, i podzielić na kilka ramek danych? Lubię to: Pierwsza kolumna groupby "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 następnie podzielić na różne ramki danych na podstawie liczb w "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
Odpowiedzi:
2 dla odpowiedzi № 1Iteruj po każdej grupie df.groupby
zwraca.
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
Jeśli chcesz dyktować dane, zalecam:
df_dict = {idx : g for idx, g in df.groupby("a")}
Tutaj, idx
jest wyjątkowy a
wartość.
Kilka uprzejmych technik dzięki uprzejmości Korzeń:
df_dict = dict(list(df.groupby("a"))) # for a dictionary
I,
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)
1 dla odpowiedzi nr 2
W ten sposób za pomocą 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