在一列中有3個不同的值,并將它們替換成pandas中的0/1?

我有以下數據幀:

d = {'col1':['a','b','c','b','a','c','c','c'],'col2':[1,2,3,4,5,6,7,8]}
df = pd.DataFrame(data=d)

我想知道如何將'a'更改為1'b'更改為0,將'c'的50%更改為1,其余的50%隨機更改為col1

所以col1看起來像這樣[1,0,1,0,1,0,0,1]

? 最佳回答:

將值按c比較為Series.eq的掩碼,然后使用Series.map按字典設置值,最后按Series.sample設置50%的值。僅過濾值:

m = df['col1'].eq('c')
df['col1'] = df['col1'].map({'a':1, 'b':0, 'c':0})

df.loc[df[m].sample(frac = 0.5).index, 'col1'] = 1

或者,您可以過濾值并將False值添加到Series.reindex上,以獲得大小類似原始DataFrame的掩碼:

m = df['col1'].eq('c')
df['col1'] = df['col1'].map({'a':1, 'b':0, 'c':0})

mask = m[m].sample(frac = 0.5).reindex(df.index, fill_value=False)
df.loc[mask, 'col1'] = 1
print (df)
   col1  col2
0     1     1
1     0     2
2     1     3
3     0     4
4     1     5
5     1     6
6     0     7
7     0     8

Numpy solution with numpy.random.choice:

m = df['col1'].eq('c')
df['col1'] = df['col1'].map({'a':1, 'b':0, 'c':0})

df.loc[m, 'col1'] = np.random.choice([0,1], p=[0.5, 0.5], size=m.sum())
主站蜘蛛池模板: 国产一区二区精品尤物| 国产精品亚洲午夜一区二区三区| 日本精品一区二区三本中文| 亚洲韩国精品无码一区二区三区| 国产av天堂一区二区三区| 日本一区二区免费看| 中文字幕AV一区中文字幕天堂| 精品无码综合一区二区三区| 亚洲韩国精品无码一区二区三区| 无码午夜人妻一区二区不卡视频| 亚洲狠狠久久综合一区77777| 精品亚洲福利一区二区| 97久久精品无码一区二区| 国产一区二区在线观看app| 天美传媒一区二区三区| 在线播放一区二区| 国产AV午夜精品一区二区入口| 天码av无码一区二区三区四区 | 精品女同一区二区三区免费站| 亚洲国产av一区二区三区| 精品乱码一区二区三区在线| 国产精品免费视频一区| 国产成人精品视频一区| 日本一区二区三区精品视频| 日本一区二区三区在线网| 国产亚洲福利精品一区| 亚洲AV无码一区二区三区鸳鸯影院| 精品乱子伦一区二区三区高清免费播放 | 亚洲乱码av中文一区二区| 亚洲福利一区二区| 无码人妻一区二区三区免费手机| 国产福利91精品一区二区| 深田咏美AV一区二区三区| 亚洲午夜精品一区二区麻豆| 日韩在线视频一区| 久久久精品日本一区二区三区| 成人无码AV一区二区| 国产精品伦一区二区三级视频| 久久精品午夜一区二区福利| 一区二区三区无码被窝影院| 国产一区二区三区在线电影|