亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用列表根據不同的列值更改多個布爾列的值

使用列表根據不同的列值更改多個布爾列的值

躍然一笑 2023-10-18 21:29:34
有一個值列表weather = ['cloudy', 'sunny']我有一個帶有舊列“天氣”的數據框。我們切換到 2 個帶有布爾值的新列,因此需要考慮所有舊列。現在這是我的數據框:[In]data = [['cloudy', False, False], ['sunny', False, False]]df = pd.DataFrame(data, columns=['old', 'cloudbool', 'sunbool'])df[Out]     old  cloudbool sunbool0   cloudy  False   False1   sunny   False   False期望的輸出:[In]data = [['cloudy', True, False], ['sunny', False, True]]df = pd.DataFrame(data, columns=['old', 'cloudbool', 'sunbool'])[Out]    old   cloudbool sunbool0   cloudy  True    False1   sunny   False   True我知道我可以做類似下面的事情,但我有一個“天氣類型”列表,比 2 長得多。df.loc[df['old'] == 'cloudy', ['cloudbool']] = True我希望我正確地傳達了這一點。謝謝
查看完整描述

2 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

讓我們嘗試str.get_dummies創建虛擬指標變量,然后join使用原始數據幀:

df[['old']].join(df['old'].str.get_dummies().astype(bool).add_suffix('bool'))

? ? ? old? cloudybool? sunnybool

0? cloudy? ? ? ? True? ? ? False

1? ?sunny? ? ? ?False? ? ? ?True


查看完整回答
反對 回復 2023-10-18
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

我知道該get_dummies方法是為此構建的,但另一種方法是從列表理解創建一系列,將列中的天氣值old與bool列名稱進行比較(假設它們已經存在,如您的示例中所示)。然后,將其隱藏到列表中,準備將其添加到數據框中。

您的名稱沒有直接匹配,因此我省略了最后兩個字符,例如cloudywill beclou和sunnywill be sun。我認為任何天氣的后綴都不可能超過 2 個字符?這也是為什么它不像get_dummies. 您還可以使列名稱與您的值匹配,例如cloudybool和sunnybool:

s = df.apply(lambda x: [x['old'][:-2] in col for col in df.columns[1:]], axis=1).to_list()

df1 = pd.concat([df['old'],pd.DataFrame(s, columns=df.columns[1:])], axis=1)

df1

Out[1]: 

      old  cloudbool  sunbool

0  cloudy       True    False

1   sunny      False     True


查看完整回答
反對 回復 2023-10-18
  • 2 回答
  • 0 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號