1. 获取某一列唯一值列表:
data_df['labels'].unique()
2. 根据某一列具体值过滤:
tmp_data_df = data_df[data_df['labels'].isin([0])]
3. sort_value使用:
tmp_data_df.sort_values(by=['matrix'],
key=lambda x: x.apply(lambda y: np.linalg.norm(np.array(y) - centroid_value)),
inplace=True,
ascending=True)
上述lambda里面的具体语法可自行根据需求修改,当前含义是对matrix列,求每一个向量与中心向量的欧氏距离;
4. 与上面的sort_values类似的排序方法:
data_df['distance'] = data_df['matrix'].apply(lambda x: np.linalg.norm(np.array(x) - centroid_value))
data_df.sort_values(by=['distance'], inplace=True)
基于df现有列,使用apply新增一列,根据该列值进行排序;
5. 合并多个dataframe
def extract_balanced_label(filepath, out_filepath='', labels=[1, 2, 3, 4, 5], n=1000):
"""
从原始文件中抽取各标签数据均衡的数据
每个标签N条
"""
data_df = pd.read_csv(filepath)
filtered_df = []
for l in labels:
l_df = data_df[data_df['label'] == l][:n]
filtered_df.append(l_df)
new_df = reduce(lambda left, right: pd.merge(left, right, how='outer'), filtered_df)
new_df.to_csv(out_filepath.format(len(new_df)), index=False)
print(f'save file to {out_filepath.format(len(new_df))}.')