将列表元素以特定比例分配到新的pandas DataFrame列的更简单方法,条件是同一数据帧的其他列值



我有一个包含多列的pandas DataFramedf。现在我想在其他列值的基础上添加一个新列。我在包括np.wherenp.select的堆栈中找到了许多答案。然而,在我的情况下,对于每个if条件(每个if/elif/else块(,新列必须在具有特定比率的3个值中进行选择。例如,

for i in range(df.shape[0]):
if(df.iloc[i]['col1']==x):
df.iloc[i]['new_col']= choose one value between l=['a','b','c'] in 0.3,0.3,0.4 ratio

也就是说,对于满足if语句中条件的所有行,列表l的元素应该以上述比率分布到新列。

  • 我目前的做法是,将df拆分为多个子数据帧df_sub,用于每个if-else条件语句。接下来使用np.random.choices(l,df_sub.shape[0],p=[0.3,0.3,0.4)创建列表,其中l=['a','b','c']。将l添加到df_sub作为新列,然后沿着axis=0加入所有这些子数据帧
  • 我想知道是否有更简单的方法来完成这项任务,而不是分割和连接数据帧

尝试:

s = df['col1'] == x
df.loc[s, 'new_col'] = np.random.choice(['a','b','c'], 
size=s.sum(), 
p=[0.3,0.3,0.4])

最新更新