Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python2.7中将数据拆分为交替组_Python_Python 2.7_Text_Grouping_Filesplitting - Fatal编程技术网

在Python2.7中将数据拆分为交替组

在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个城市 可以用这种方式编码吗 预

上面显示了.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排,
第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