我想按密钥(第一个和最后一个)对数据进行排序,但结果应该包括第一个和最后一个密钥之间的所有数据,而不仅仅是唯一数据。
我有数据:
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
请帮帮我, 谢谢你的回答
答案 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