/ / Jak grouby jedną kolumnę i nic nie robić z innymi kolumnami w pandach? - python, pandy, pandy-groupby

Jak grouby jedną kolumnę i nic nie robić w innych kolumnach w pandach? - python, pandy, pandy-groupby

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 № 1

Iteruj 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