在 pandas 中插入具有随机字符串值的新列

A N*_*eto 2 python random series dataframe pandas

我有一个数据框

     A B C
   0 1 2 3  
   1 2 3 3  
   2 3 2 1  
Run Code Online (Sandbox Code Playgroud)

我需要在 pandas DataFrame 中创建一个新列,并随机填充此列中的“是”或“否”。

     A B C  NEW
   0 1 2 3  yes
   1 2 3 3  no
   2 3 2 1  no
Run Code Online (Sandbox Code Playgroud)

使用 random.choice 会导致每一行的结果都相同的列

     A B C  NEW
   0 1 2 3  no
   1 2 3 3  no
   2 3 2 1  no
Run Code Online (Sandbox Code Playgroud)

我尝试了 map、apply 和 applymap 但有更简单的方法。

A N*_*eto 8

您必须设置新列才能pd.Series使用random.choices:

import random

df['NEW'] = pd.Series(
    random.choices(['yes', 'no'], weights=[1, 1], k=len(df)), 
    index=df.index
)
Run Code Online (Sandbox Code Playgroud)

random.choices将为每一行选取其中一个值。

weights分别设置选择“是”或“否”的概率。如果您希望获得更高的“是”机会,则必须增加第一个数字。

k设置系列的长度。它必须具有相同长度的 DataFrame。

index设置为相同很重要,df.index否则无论您是否从更大的 DataFrame 中切分它,它都会填充 NaN