У меня уже есть словарь фреймов данных, я хотел бы перебрать каждый фрейм данных словаря и сгруппировать их на основе столбца с именем: Size, а затем сохранить для каждой группы данных в новых фреймах данных B. Моя проблема is: для каждой итерации B будет заменен более новым фреймом данных. Я хотел бы иметь все фреймы данных для всех возможных групп. У кого-нибудь есть идеи, как это сделать?

Небольшой пример:

data = {'Name':['Tom', 'nick', 'krish', 'jack','Kody','Kim'], 'Age':[20, 21, 19, 18,6,6],'Size':['M','M','L','S','S','M']} 
data2={'Name':['Jason', 'Damon', 'Ronda', 'Kylie','Ron','Harry'], 'Age':[20, 12, 11, 13,6,5],'Size':['L','M','L','M','L','L']} 
df = pd.DataFrame(data) 
df2=pd.DataFrame(data2)
A={}
A[0] = df
A[1]=df2
B={}
for x in range(0,2):
    A[x]=A[x].groupby(["Size"])
    KeysA=list(A[x].groups.keys())
    display(len(KeysA))
    for z in range(0, len(KeysA)):
        B[z]= A[x].get_group(str(KeysA[z]))

Я хочу получить такой результат: (см. Рисунок),
с моим кодом кадры данных перезаписываются при каждой итерации. В итоге у меня есть три фрейма данных вместо пяти.

I want to have this output

0
the phoenix 7 Окт 2020 в 21:58

1 ответ

Лучший ответ

Это то, что вы хотите?

import pandas as pd

data = {'Name': ['Tom', 'nick', 'krish', 'jack', 'Kody', 'Kim'], 'Age': [20, 21, 19, 18, 6, 6],
        'Size': ['M', 'M', 'L', 'S', 'S', 'M']}
data2 = {'Name': ['Jason', 'Damon', 'Ronda', 'Kylie', 'Ron', 'Harry'], 'Age': [20, 12, 11, 13, 6, 5],
         'Size': ['L', 'M', 'L', 'M', 'L', 'L']}
df = pd.DataFrame(data)
df2 = pd.DataFrame(data2)
A = {}
A[0] = df
A[1] = df2
B = {}
new_df = pd.concat(A.values())
groups = new_df.groupby(["Size"])
for group in groups:
    B[group[0]] = group[1]

for k, v in B.items():
    print(f"{k}: {v}")

Выход:

L:     Name  Age Size
2  krish   19    L
0  Jason   20    L
2  Ronda   11    L
4    Ron    6    L
5  Harry    5    L
M:     Name  Age Size
0    Tom   20    M
1   nick   21    M
5    Kim    6    M
1  Damon   12    M
3  Kylie   13    M
S:    Name  Age Size
3  jack   18    S
4  Kody    6    S

Для 5 фреймов данных (в списке) сделайте следующее:

import pandas as pd

data = {'Name': ['Tom', 'nick', 'krish', 'jack', 'Kody', 'Kim'], 'Age': [20, 21, 19, 18, 6, 6],
        'Size': ['M', 'M', 'L', 'S', 'S', 'M']}
data2 = {'Name': ['Jason', 'Damon', 'Ronda', 'Kylie', 'Ron', 'Harry'], 'Age': [20, 12, 11, 13, 6, 5],
         'Size': ['L', 'M', 'L', 'M', 'L', 'L']}
df = pd.DataFrame(data)
df2 = pd.DataFrame(data2)
A = {}
A[0] = df
A[1] = df2
B = []
for key, value in A.items():
    groups = value.groupby(["Size"])
    for group in groups:
        B.append(group[1])

for x in B:
    print(x)

Выход:

    Name  Age Size
2  krish   19    L
   Name  Age Size
0   Tom   20    M
1  nick   21    M
5   Kim    6    M
   Name  Age Size
3  jack   18    S
4  Kody    6    S
    Name  Age Size
0  Jason   20    L
2  Ronda   11    L
4    Ron    6    L
5  Harry    5    L
    Name  Age Size
1  Damon   12    M
3  Kylie   13    M
1
D-E-N 7 Окт 2020 в 19:59