在Python2.7中将数据拆分为交替组
上面显示了.txt文件 我的目标是创建4个尽可能均匀分布的小组,包括所有城市,这意味着每个小组都有“纽约”、“孟买”和“巴黎” 由于有25个数据,3组将有6行,而1组将有7行 我现在想的是,由于数据已经按城市排序,我可以逐行读取文本文件,然后对于每一行,我将以交替模式将其附加到4个组(G1-G4)。也就是说,第一行,它将附加到G1,然后第二行附加到G2,第三行附加到G3,第四行附加到G4,第五行附加回G1,第六行附加到G2,依此类推。这可以确保所有团体都拥有所有3个城市 可以用这种方式编码吗 预期结果: G1: 第1行/第1行, 第5排, 第9排 G2: 第2排, 第6排, 第10排 G3: 第3排, 第7排, 第11排 G4: 第4排, 第8排,在Python2.7中将数据拆分为交替组,python,python-2.7,text,grouping,filesplitting,Python,Python 2.7,Text,Grouping,Filesplitting,上面显示了.txt文件 我的目标是创建4个尽可能均匀分布的小组,包括所有城市,这意味着每个小组都有“纽约”、“孟买”和“巴黎” 由于有25个数据,3组将有6行,而1组将有7行 我现在想的是,由于数据已经按城市排序,我可以逐行读取文本文件,然后对于每一行,我将以交替模式将其附加到4个组(G1-G4)。也就是说,第一行,它将附加到G1,然后第二行附加到G2,第三行附加到G3,第四行附加到G4,第五行附加回G1,第六行附加到G2,依此类推。这可以确保所有团体都拥有所有3个城市 可以用这种方式编码吗 预
第12行,依此类推。为了便于解释,我只保留行索引
day city temperature windspeed event
2017-01-01 new york 32 6 Rain
2017-01-02 new york 36 7 Sunny
2017-01-03 new york 28 12 Snow
2017-01-04 new york 33 7 Sunny
2017-01-05 new york 31 7 Rain
2017-01-06 new york 33 5 Sunny
2017-01-07 new york 27 12 Rain
2017-01-08 new york 23 7 Rain
2017-01-01 mumbai 90 5 Sunny
2017-01-02 mumbai 85 12 Fog
2017-01-03 mumbai 87 15 Fog
2017-01-04 mumbai 92 5 Rain
2017-01-05 mumbai 89 7 Sunny
2017-01-06 mumbai 80 10 Fog
2017-01-07 mumbai 85 9 Sunny
2017-01-08 mumbai 89 8 Rain
2017-01-01 paris 45 20 Sunny
2017-01-02 paris 50 13 Cloudy
2017-01-03 paris 54 8 Cloudy
2017-01-04 paris 42 10 Cloudy
2017-01-05 paris 43 20 Sunny
2017-01-06 paris 48 4 Cloudy
2017-01-07 paris 40 14 Rain
2017-01-08 paris 42 15 Cloudy
2017-01-09 paris 53 8 Sunny
然后你可以使用切片
rows = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
结果将是
G1, G2, G3, G4 = [rows[i::4] for i in range(4)]
由于您的输入已经排序,您可以将字符串拆分为一个列表,然后使用步骤4对其进行切片:
G1 == [1, 5, 9, 13, 17, 21, 25]
G2 == [2, 6, 10, 14, 18, 22]
G3 == [3, 7, 11, 15, 19, 23]
G4 == [4, 8, 12, 16, 20, 24]]
这将产生:
data = ''' 2017-01-01 new york 32 6 Rain
2017-01-02 new york 36 7 Sunny
2017-01-03 new york 28 12 Snow
2017-01-04 new york 33 7 Sunny
2017-01-05 new york 31 7 Rain
2017-01-06 new york 33 5 Sunny
2017-01-07 new york 27 12 Rain
2017-01-08 new york 23 7 Rain
2017-01-01 mumbai 90 5 Sunny
2017-01-02 mumbai 85 12 Fog
2017-01-03 mumbai 87 15 Fog
2017-01-04 mumbai 92 5 Rain
2017-01-05 mumbai 89 7 Sunny
2017-01-06 mumbai 80 10 Fog
2017-01-07 mumbai 85 9 Sunny
2017-01-08 mumbai 89 8 Rain
2017-01-01 paris 45 20 Sunny
2017-01-02 paris 50 13 Cloudy
2017-01-03 paris 54 8 Cloudy
2017-01-04 paris 42 10 Cloudy
2017-01-05 paris 43 20 Sunny
2017-01-06 paris 48 4 Cloudy
2017-01-07 paris 40 14 Rain
2017-01-08 paris 42 15 Cloudy
2017-01-09 paris 53 8 Sunny'''
lines = data.splitlines()
groups = [lines[i::4] for i in range(4)]
for g in groups:
print(g)
您可以使用
pandas
和一些数学运算来复制您的组
[' 2017-01-01 new york 32 6 Rain', ' 2017-01-05 new york 31 7 Rain', ' 2017-01-01 mumbai 90 5 Sunny', ' 2017-01-05 mumbai 89 7 Sunny', ' 2017-01-01 paris 45 20 Sunny', ' 2017-01-05 paris 43 20 Sunny', ' 2017-01-09 paris 53 8 Sunny']
[' 2017-01-02 new york 36 7 Sunny', ' 2017-01-06 new york 33 5 Sunny', ' 2017-01-02 mumbai 85 12 Fog', ' 2017-01-06 mumbai 80 10 Fog', ' 2017-01-02 paris 50 13 Cloudy', ' 2017-01-06 paris 48 4 Cloudy']
[' 2017-01-03 new york 28 12 Snow', ' 2017-01-07 new york 27 12 Rain', ' 2017-01-03 mumbai 87 15 Fog', ' 2017-01-07 mumbai 85 9 Sunny', ' 2017-01-03 paris 54 8 Cloudy', ' 2017-01-07 paris 40 14 Rain']
[' 2017-01-04 new york 33 7 Sunny', ' 2017-01-08 new york 23 7 Rain', ' 2017-01-04 mumbai 92 5 Rain', ' 2017-01-08 mumbai 89 8 Rain', ' 2017-01-04 paris 42 10 Cloudy', ' 2017-01-08 paris 42 15 Cloudy']
你试过什么吗?如果您的文件在列表中,您可以执行类似于
g1=my_list[0::4]
等操作。@mike.k我曾尝试使用pandas处理此问题,但我只能将它们分成4个不同的组,而不能确保所有城市都在所有组中。我将首先打开文件并将每个句子添加到列表中。[0::4]是什么意思?起初我试图对付熊猫,但还是被卡住了。你能给我解释一下你的密码吗。我已经尝试过了,在添加“group”索引后,我可以使用groupby()根据分配的组对数据进行分组。在那之后,我如何才能将每个组导出到csv文件中?@Lily因此基本上代码会重复[1,2,3,4]
n次,然后填充其余部分。例如,如果你有10行,你想要[1,2,3,4,1,2,3,4,1,2]
对吗?这是[1,2,3,4]*2
+[1,2]
。*2
这里是我发布的代码中的*n
,而[1,2]
是上面代码中的[1,2,3,4][:2]
。有很多方法可以将其保存到csv
。您只需执行df.sort_值(按class='group')
并对df进行排序即可。你不需要这里的团员。您还可以拆分df
并为每组保存4个不同的.csv。哦,好的!我明白了。谢谢你的简单解释。我想将每个df保存到4个不同的csv中。这就是为什么我想到使用groupby()谢谢你的回答。输出就是我想要的
n, r = df.shape[0] // 4, df.shape[0] % 4
df['group'] = [1,2,3,4]*n + [1,2,3,4][:r]
day city temperature windspeed event group
0 2017-01-01 new york 32 6 Rain 1
1 2017-01-02 new york 36 7 Sunny 2
2 2017-01-03 new york 28 12 Snow 3
3 2017-01-04 new york 33 7 Sunny 4
4 2017-01-05 new york 31 7 Rain 1
5 2017-01-06 new york 33 5 Sunny 2
6 2017-01-07 new york 27 12 Rain 3
7 2017-01-08 new york 23 7 Rain 4
8 2017-01-01 mumbai 90 5 Sunny 1
9 2017-01-02 mumbai 85 12 Fog 2
10 2017-01-03 mumbai 87 15 Fog 3
11 2017-01-04 mumbai 92 5 Rain 4
12 2017-01-05 mumbai 89 7 Sunny 1
13 2017-01-06 mumbai 80 10 Fog 2
14 2017-01-07 mumbai 85 9 Sunny 3
15 2017-01-08 mumbai 89 8 Rain 4
16 2017-01-01 paris 45 20 Sunny 1
17 2017-01-02 paris 50 13 Cloudy 2
18 2017-01-03 paris 54 8 Cloudy 3
19 2017-01-04 paris 42 10 Cloudy 4
20 2017-01-05 paris 43 20 Sunny 1
21 2017-01-06 paris 48 4 Cloudy 2
22 2017-01-07 paris 40 14 Rain 3
23 2017-01-08 paris 42 15 Cloudy 4
24 2017-01-09 paris 53 8 Sunny 1