Python 如何将其编写为单个for循环?

Python 如何将其编写为单个for循环?,python,pandas,dataframe,loops,Python,Pandas,Dataframe,Loops,我必须将数据分成四个组,每个组将数据分成组和子组,如下所示。如何将其编写为单个for循环 到目前为止我试过什么 df = pd.DataFrame({'Data':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}) n = round(len(df)/4) groups = [df[i:i+n] for i in range(0,df.shape[0],n)] first_group = groups[0] second_group = groups[1

我必须将数据分成四个组,每个组将数据分成组和子组,如下所示。如何将其编写为单个for循环

到目前为止我试过什么

df = pd.DataFrame({'Data':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]})

n = round(len(df)/4)


groups = [df[i:i+n] for i in range(0,df.shape[0],n)]

first_group = groups[0]
second_group = groups[1]
third_group = groups[2]
fourth_group = groups[3]


split1 = first_group.copy().reset_index(drop=True)
split1['Group'] = 'A'
split1['Sub group'] = pd.Series(range(101, 105))

split2 = second_group.copy().reset_index(drop=True)
split2['Group'] = 'B'
split2['Sub group'] = pd.Series(range(201, 205))

split3 = third_group.copy().reset_index(drop=True)
split3['Group'] = 'C'
split3['Sub group'] = pd.Series(range(301, 305))

split4 = fourth_group.copy().reset_index(drop=True)
split4['Group'] = 'D'
split4['Sub group'] = pd.Series(range(401, 405))

n_split = pd.concat([split1, split2, split3, split4])

输出应类似于下表:

  Data Group Sub group
0   1   A   101
1   2   A   102
2   3   A   103
3   4   A   104
0   5   B   201
1   6   B   202
2   7   B   203
3   8   B   204
0   9   C   301
1   10  C   302
2   11  C   303
3   12  C   304
0   13  D   401
1   14  D   402
2   15  D   403
3   16  D   404
给你:方法允许你循环浏览字母(当然要注意限制!)

给你:方法允许你循环浏览字母(当然要注意限制!)


这里不需要循环

我们可以使用
map
cumcount

就个人而言,我会将
4
设置为一个常量变量,这样您就可以使用索引的
divmod
,使其完全动态

import pandas as pd
from string import ascii_uppercase 

df = pd.DataFrame({'Data':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]})
idx = set(df.index // 4)


df['group'] = (df.index // 4).map(dict(zip(idx, ascii_uppercase )))
df['subgroups'] = (((df.index // 4) + 1) * 100) + df.groupby('group').cumcount() + 1


这里不需要循环

我们可以使用
map
cumcount

就个人而言,我会将
4
设置为一个常量变量,这样您就可以使用索引的
divmod
,使其完全动态

import pandas as pd
from string import ascii_uppercase 

df = pd.DataFrame({'Data':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]})
idx = set(df.index // 4)


df['group'] = (df.index // 4).map(dict(zip(idx, ascii_uppercase )))
df['subgroups'] = (((df.index // 4) + 1) * 100) + df.groupby('group').cumcount() + 1


提示:每当您发现自己有许多变量,如
var1、var2、var563
,请考虑使用一个列表来存储多个对象扫描您是否编写了一个for循环来设置第一个组,四次?现在,你需要对代码进行哪些更改,以使其适应每个组?p.s如果你需要使用字母以外的其他内容,你可以手动创建你组中预期长度的词典。例如
{1:'Week1',2:'Week2'}
然后将
映射(dict)(zip..
替换为
映射(你的dict)
提示:每当你发现自己有许多变量,比如
var1、var2、var563
,考虑使用一个列表来存储多个对象扫描你写了一个for循环,设置了第一个组,四次?现在,你需要对代码做什么更改,使其针对每个组进行调整?如果你需要使用字母以外的内容,请注意所有字母您可以手动按组的预期长度创建词典。例如
{1:'Week1',2:'Week2'}
然后将
映射(dict(zip..
替换为
.map(您的dict)
非常感谢!如果我有100行,并且我想将它们分成四组,我该如何使用它?还有其他分组方法吗?例如,如果我想将组名更改为QW1、QW2、QW3和QW4,该怎么办?ord()支持字符而不是字符串,对吗?使用“QWn”(其中“n”是数字)这将更容易:只需将
附加到
gropus_列表
字符串
f“QW{n}”
n=row['Data']%4+1
非常感谢!如果我有100行,我想将它们分成四组,我该如何使用它?还有其他分组方法吗?例如,如果我想将组名更改为QW1、QW2、QW3和QW4,该怎么办?ord()支持字符而不是字符串,对吗?使用“QWn”(其中“n”是数字)这将更容易:只需
附加到
gropus_列表
字符串
f“QW{n}”
n=row['Data']%4+1
import pandas as pd
from string import ascii_uppercase 

df = pd.DataFrame({'Data':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]})
idx = set(df.index // 4)


df['group'] = (df.index // 4).map(dict(zip(idx, ascii_uppercase )))
df['subgroups'] = (((df.index // 4) + 1) * 100) + df.groupby('group').cumcount() + 1
print(df)


   Data group  subgroups
0      1     A        101
1      2     A        102
2      3     A        103
3      4     A        104
4      5     B        201
5      6     B        202
6      7     B        203
7      8     B        204
8      9     C        301
9     10     C        302
10    11     C        303
11    12     C        304
12    13     D        401
13    14     D        402
14    15     D        403
15    16     D        404