通过在Python中按列操作重新排序数据

时间:2017-09-07 09:09:23

标签: python-3.x data-structures

我在csv文件中有数据如下:

60,27702,1938470,13935,18513,8   
60,32424,1933740,16103,15082,11   
60,20080,1946092,9335,14970,2   
60,28236,1937936,13799,16871,6   
60,22717,1943455,10809,16726,4   

120,37702,2938470,23935,28513,8   
120,42424,2933740,26103,25082,11   
120,30080,2946092,2335,24970,2   
120,38236,2937936,23799,26871,6   
120,32717,2943455,20809,26726,4   

180,47702,3938470,33935,8513,8   
180,52424,3933740,36103,5082,11   
180,40080,3946092,3335,4970,2   
180,48236,3937936,33799,6871,6   
180,42717,3943455,30809,6726,4  

然后我使用以下代码插入列标题:

df = pd.read_csv("contikiMAC_new_out.csv", names=['Energest','CPU','LPM','Transmit','Listen','ID'])  

我使用df.groupby(['ID'])根据列' ID'来查看组中的数据。
问题是列< LPM'中的数据。一段时间后重置,所以每当LPM列中的新值对于特定的ID'时,我想用新值添加前一个值。 。
我试过了:

for x in df.groupby(['ID']):
  for i in df.ID:
    if (df.loc[i, 'LPM'] < df.loc[i - 1, 'LPM']):
        df.loc[i, 'LPM'] = df.loc[i, 'LPM'] + df.loc[i - 1, 'LPM']

但实际上并没有得到我想要的卓有成效的结果,因为它与“LPM”混合在一起。不同ID的价值&#39;这个过程需要很长时间。任何人都可以帮我建议一种基于&#39; ID&#39;在csv文件中编写数据组的方法。执行总和操作后?

我想看的数据结构如下:

60,27702,1938470,13935,18513,8   
120,37702,2938470,23935,28513,8    
180,47702,3938470,33935,37026,8    

60,32424,1933740,16103,15082,11    
120,42424,2933740,26103,25082,11   
180,52424,3933740,36103,30164,11   

60,20080,1946092,9335,14970,2   
120,30080,2946092,2335,24970,2   
180,40080,3946092,3335,29940,2   

60,28236,1937936,13799,16871,6   
120,38236,2937936,23799,26871,6   
180,48236,3937936,33799,33742,6   

60,22717,1943455,10809,16726,4   
120,32717,2943455,20809,26726,4   
180,42717,3943455,30809,33452,4

1 个答案:

答案 0 :(得分:0)

如果我理解您的问题,DataFrame.shift就是您正在寻找的。

类似的东西:

df['LPM_prev'] = df.groupby(['ID'])['LPM'].shift(1)

然后您可以使用该列