通过按列值分组,从一个数据帧创建多个数据帧

2024-10-01 13:25:07 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我有以下数据帧,但有大量的行(100、1000等):

^{tb1}$

问题:

现在我想打印单独的数据帧,其中包含访问同一年龄段的所有人,因此输出应如下所示:

DF1:

^{tb2}$

DF2:

^{tb3}$

我已经尝试了以下功能:

Try1:

def groupAge(data):
    x = -1
    for x in range(len(data)):
        #q = len(data[data["Age"] == data.loc[x, "Age"]])

        b = data[data["Age"] == data.loc[x,"Age"]]
        x = x + 1
        print(b,x)


    return  b

Try2:

def groupAge(data):
    x = 0

    for x in range(len(data)):

        q = len(data[data["Age"] == data.loc[x, "Age"]])
        x = x + 1

        for k in range(0,q,q):
            b = data[data["Age"] == data.loc[k,"Age"]]
            print(b)

        return  b

他们都没有产生正确的产出。Try1打印几个组,所有组打印两次,但不遍历整个数据帧,Try2只打印第一个年龄组,也打印两次

首先,我不能确定为什么它总是打印两次输出,也不能确定为什么它不能在整个数据帧中工作

有人能帮忙吗


Tags: 数据inforagedatalenreturndef
1条回答
网友
1楼 · 发布于 2024-10-01 13:25:07

在您的第一次尝试中,您将循环数据帧的长度,然后每次分别用0、1、2、3和4替换x时重复下面的行。在旁注中,x = x + 1不是必需的range已经处理好了

b = data[data["Age"] == data.loc[x,"Age"]]

它显然会每次打印两次,因为您正在扫描整个数据帧data并执行重复的命令。例如:

print(data.loc[0, 'Age'])
print(data.loc[1, 'Age']) 
20
20

上述两条语句都打印20,因此通过在循环中替换20,实际上您将执行以下命令两次

b = data[data["Age"] == 20]

我想你只需要这个

unq_age = data['Age'].unique()
df1 = df.loc[df['Age'] == unq_age[0]]
df2 = df.loc[df['Age'] == unq_age[1]]

df1
       # Person1 Person2  Age
0  1    Alex   Maria   20
1  2    Paul   Peter   20

df2
    #   Person1 Person2 Age
2   3   Klaus   Hans    30
3   4   Victor  Otto    30
4   5   Gerry   Justin  30

相关问题 更多 >