【问题标题】:How to assign random values from a list to a column in a pandas dataframe?如何将列表中的随机值分配给熊猫数据框中的列?
【发布时间】:2019-06-19 09:52:29
【问题描述】:

我在 Bigquery 中使用 Python,并且有一个大的数据框 df(大约 7m 行)。我还有一个列表 lst ,其中包含一些日期(比如给定月份中的所有日期)。

我正在尝试在 df 中创建一个附加列“random_day”,其中每一行中的 lst 都有一个随机值。

我尝试运行一个循环并应用函数,但作为一个相当大的数据集,它被证明具有挑战性。

我的尝试通过循环解决方案:

df["rand_day"] = ""

for i in a["row_nr"]:
  rand_day = sample(day_list,1)[0]
  df.loc[i,"rand_day"] = rand_day

以及应用解决方案,首先定义我的函数,然后调用它:

def random_day():
  rand_day = sample(day_list,1)[0]
  return day

df["rand_day"] = df.apply(lambda row: random_day())

对此有什么建议吗? 谢谢

【问题讨论】:

    标签: python pandas loops random


    【解决方案1】:

    使用numpy.random.choice,如有必要,将日期转换为to_datetime

    df = pd.DataFrame({
            'A':list('abcdef'),
            'B':[4,5,4,5,5,4],
    })
    
    day_list = pd.to_datetime(['2015-01-02','2016-05-05','2015-08-09'])
    #alternative
    #day_list = pd.DatetimeIndex(['2015-01-02','2016-05-05','2015-08-09'])
    
    df["rand_day"] = np.random.choice(day_list, size=len(df))
    print (df)
       A  B   rand_day
    0  a  4 2016-05-05
    1  b  5 2016-05-05
    2  c  4 2015-08-09
    3  d  5 2015-01-02
    4  e  5 2015-08-09
    5  f  4 2015-08-09
    

    【讨论】:

    • 我对上述@jezrael 有一个后续问题-如何创建值列表,然后将它们添加到具有给定分布的数据框中?上面的方法可以随机添加列表的元素,但是说我有一个值列表 [50, 40, 30, 20, 10] 有没有办法将我的 df 的 x% 分配给 50 值,y% 40 , z% 30 等...或将它们分配给跨 len(df) 的正态分布的数据帧?
    • 小记,numpy 文档现在推荐使用numpy.random.Generator.choice 而不是numpy.random.choice
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 2020-04-13
    • 2022-08-04
    • 2019-04-06
    • 1970-01-01
    • 2020-09-08
    相关资源
    最近更新 更多