先建立一个DateFrame
a = np.array([[1, 3, 4], [1, 2, 3], [1, 6, 4], [1, 5, 3], [2, 5, 2], [3, 4, 4]])
df = pd.DataFrame(a, columns=['id', 'F1', 'F2'])
结构如图所示:
需求1:找出id里含有2的行,其他行删掉
df[df.iloc[:,0].isin([2])]
df[df['id'].isin([2])] #两条效果相同
结果如下:
需求2:看不同id的行数,行数大于3的部分截掉,小于3的部分填充0
for i in range(1, int(max(df.iloc[:, 0])) + 1):
s = df.loc[df['id'] == i]
index_list = s.index[:-3]
if len(s) > 3: # 截去
df.drop(index_list, inplace=True)
elif len(s) < 3 and len(s) > 0: # 填充
#填充的内容是[i,0,0],其实可以全0,做padding
a = [i]
a.extend(list(np.zeros(2, dtype=int)))
zeros = pd.Series(np.array(a), index=df.columns)
length = s.index[-1] + 1 #要插入的地方是length
part1 = df.iloc[:length]
part2 = df.iloc[length:]
for x in range(3 - len(s)):
part1 = part1.append(zeros, ignore_index=True)
df = part1.append(part2)
else:
continue
df = df.reset_index(drop=True)
截取部分思路:获取后三行之前的index,删除掉(只保留最后三行)
填充部分思路:把df分为两部分part1和part2,分界线是你要插入的地方。用append在part1后面添加上行,最后再把part2合上去
结果如下