为了账号安全,请及时绑定邮箱和手机立即绑定

如何将分组数据存储在嵌套 for 循环中的单独数据框中

如何将分组数据存储在嵌套 for 循环中的单独数据框中

HUH函数 2023-10-18 16:09:31
我已经有一个数据帧字典,我想循环字典的每个数据帧,并根据名为:Size 的列对它们进行分组,然后将每组数据存储在新的数据帧中 B. 我的问题是:对于每次迭代,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] = dfA[1]=df2B={}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]))我想要这样的输出:(见图),使用我的代码,每次迭代都会覆盖数据帧。所以我最终有三个数据框而不是五个。
查看完整描述

1 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

这是你想要的吗?


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


查看完整回答
反对 回复 2023-10-18
  • 1 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信