/ / Як грубувати одну колонку і нічого не робити з іншими колонами в пандах? - пітон, панди, панди-групи

Як придушити один стовпчик і нічого не робити для інших стовпців у пандах? - пітони, панди, панд-групи

У мене є такий файл даних:

  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

Відповіді:

2 для відповіді № 1

Перегляньте кожну групу 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)

1 для відповіді № 2

Це шлях, використовуючи 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