按键(第一个和最后一个)排序数据,包括第一个和最后一个键之间的所有数据

时间:2018-02-23 03:24:40

标签: pandas sorting append

我想按密钥(第一个和最后一个)对数据进行排序,但结果应该包括第一个和最后一个密钥之间的所有数据,而不仅仅是唯一数据。

我有数据:

ID  Data
ID1 40
ID2 43
ID3 45
    43
ID1 34
    57
ID3 58
ID4 65
    23
ID2 46
    90
ID4 87
ID1 65
    54
ID3 11
ID4 23
    43
    56
ID3 76
ID4 87

我使用代码:

import csv

macs = []
with open('EXAMPLE.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        flag = 0
        for macs_i in macs:
            if macs_i[0] == row[0]:
                macs_i.append(row[1])
                flag = 1
                break

        if flag == 0:
            macs.append([row[0],row[1]])
print(macs)

目前的结果如下:

ID1 40  34  65              
ID2 43  46                  
ID3 45  58  11  76          
    43  57  23  90  54  43  56
ID4 65  87  23  87          

但我的预期结果是:

ID1 40  43  45  43  34  57  58  65  23  46  90  87  65              
ID2 43  45  43  34  57  58  65  23  46                              
ID3 45  43  34  57  58  65  23  46  90  87  65  54  11  23  43  56  76
ID4 65  23  46  90  87  65  54  11  23  43  56  76  87              

请帮帮我, 谢谢你的回答

1 个答案:

答案 0 :(得分:1)

IIUC

s=df.reset_index().groupby('ID')['index'].agg(['min','max'])
s.apply(lambda x : pd.Series(df.Data.iloc[x['min']:x['max']+1].values.tolist()),1)
Out[221]: 
       0     1     2     3     4     5     6     7     8     9     10    11  \
ID                                                                            
ID1  40.0  43.0  45.0  43.0  34.0  57.0  58.0  65.0  23.0  46.0  90.0  87.0   
ID2  43.0  45.0  43.0  34.0  57.0  58.0  65.0  23.0  46.0   NaN   NaN   NaN   
ID3  45.0  43.0  34.0  57.0  58.0  65.0  23.0  46.0  90.0  87.0  65.0  54.0   
ID4  65.0  23.0  46.0  90.0  87.0  65.0  54.0  11.0  23.0  43.0  56.0  76.0   
       12    13    14    15    16  
ID                                 
ID1  65.0   NaN   NaN   NaN   NaN  
ID2   NaN   NaN   NaN   NaN   NaN  
ID3  11.0  23.0  43.0  56.0  76.0  
ID4  87.0   NaN   NaN   NaN   NaN