Python 如何将其编写为单个for循环?
我必须将数据分成四个组,每个组将数据分成组和子组,如下所示。如何将其编写为单个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
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