用重复数据填充数据框,直到满足特定条件
Posted
技术标签:
【中文标题】用重复数据填充数据框,直到满足特定条件【英文标题】:Fill dataframe with duplicate data until a certain conditin is met 【发布时间】:2021-11-16 14:08:12 【问题描述】:我有一个像 df 这样的数据框,
id name age duration
1 ABC 20 12
2 sd 50 150
3 df 54 40
我想在同一个df中复制这些数据,直到持续时间总和大于或等于300,
所以df可以像..
id name age duration
1 ABC 20 12
2 sd 50 150
3 df 54 40
2 sd 50 150
到目前为止,我已经尝试了以下代码,但有时它会在无限循环中运行:/。 请帮忙。
def fillPlaylist(df,duration):
print("inside fill playlist fn.")
if(len(df)==0):
print("df len is 0, cannot fill.")
return df;
receivedDf= df
print("receivedDf",receivedDf,flush=True)
print("Received df len = ",len(receivedDf),flush=True)
print("duration to fill ",duration,flush=True)
while df['duration'].sum() < duration:
# random 5% sample of data.
print("filling")
ramdomSampleDuplicates = receivedDf.sample(frac=0.05).reset_index(drop=True)
df = pd.concat([ramdomSampleDuplicates,df])
print("df['duration'].sum() ",df['duration'].sum())
print("after filling df len = ",len(df))
return df;
【问题讨论】:
【参考方案1】:尝试使用n
而不是frac
。
n
从您的数据框中随机抽取 n 行。
sample_df = df.sample(n=1).reset_index(drop=True)
要使用frac
,你可以用这种方式重写你的代码。
def fillPlaylist(df,duration):
while df.duration.sum() < duration:
sample_df = df.sample(frac=0.5).reset_index(drop=True)
df = pd.concat([df,sample_df])
return df
【讨论】:
谢谢你能解释一下这是如何工作的吗?使用 frac 时它不起作用? @R.singh 你的方法也应该有效。frac
对数据框中的一小部分行进行采样,n
randonly 从您的数据框中采样 n 行。但是,替换receivedDf= df
、receivedDf= df.copy()
。
@R.singh 我已经为您的用例使用frac
重写了代码。如果有帮助,请批准解决方案:)以上是关于用重复数据填充数据框,直到满足特定条件的主要内容,如果未能解决你的问题,请参考以下文章
Pandas:如何根据特定列上特定值的条件选择数据框中的行[重复]
在熊猫多索引数据框中返回满足逻辑索引条件的每个组的最后一行[重复]