我有一个数据框df_merged
,最后一列是标签(1或0)。
我必须将此数据帧分为3组,一组与train_percent
,另一组与其余(1-train_percent
)以相同的比率(即0.5*(1-train_percent)
)
我可以通过以下代码完成
_df1 = df_merged.query(f"{last_column_name}=='1'")
len1 = len(_df1)
_df0 = df_merged.query(f"{last_column_name}=='0'")
len0 = len(_df0)
vali1, tst1, tr1 = np.split(_df1, [int(0.5 * (1 - train_percent) * len1), int((1 - train_percent) * len1)])
vali0, tst0, tr0 = np.split(_df0, [int(0.5 * (1 - train_percent) * len0), int((1 - train_percent) * len0)])
vali_conc, frames2, tr_conc = [vali1, vali0], [tst1, tst0], [tr1, tr0]
但是,如果我的最后一列具有两个以上的值,会发生什么?我想分成3组,并保持数据与最后一列的每个值成比例
答案 0 :(得分:0)
让我们用for循环groupby
vali_conc=[]
frames2=[]
tr_conc=[]
for x , y in df.groupby('last_column_name'):
vali1, tst1, tr1 = np.split(y, [int(0.5 * (1 - train_percent) * len1), int((1 - train_percent) * len1)])
vali_conc.append(vali1)
frames2.append(tst1)
tr_conc.append(tr1)