У мене є такий файл даних:
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