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

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

Pandas 將列的子集設置為相同的字典值

Pandas 將列的子集設置為相同的字典值

浮云間 2023-10-05 16:43:45
如果我有一個如下所示的數據框:df = pd.DataFrame({'A': [1,1,1,2,2,2], 'B': [4,5,6,7,8,9]})df['C'] = None   A  B     C0  1  4  None1  1  5  None2  1  6  None3  2  7  None4  2  8  None5  2  9  None如何將 的子集設置C為相同的字典值?例如,C為所有行設置A==1到哪里{'example': 5}?這似乎不起作用:df.loc[df['A']==1, 'C'] = {'example': 5}
查看完整描述

2 回答

?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

np.where在這種情況下你可以使用:


df['C'] = np.where(df['A']==1, {'example': 5}, df['C'])

輸出:


   A  B               C

0  1  4  {'example': 5}

1  1  5  {'example': 5}

2  1  6  {'example': 5}

3  2  7             NaN

4  2  8             NaN

5  2  9             NaN

由于更新{'example': 5}是一個可迭代的對象,當您將其分配給列時,Pandas 會嘗試展開它,因此如果您直接這樣做,則會出現長度不匹配錯誤。要將整個列分配給該字典,您需要將其包裝在另一個具有相同長度的迭代中df:


df['C'] = [{'example':5} for _ in df.index]

輸出:


   A  B               C

0  1  4  {'example': 5}

1  1  5  {'example': 5}

2  1  6  {'example': 5}

3  2  7  {'example': 5}

4  2  8  {'example': 5}

5  2  9  {'example': 5}

也就是說,除非確實有必要,否則應盡可能避免 Pandas 數據框中的復雜對象。


更新 2:根據 BEN 的評論,也反映在更新中


df['C'] = np.where(df['A']==1, {'example': 5}, df['C'])

可能會將同一對象復制{'example':5}到所有有效行,這可能不是預期的行為。所以對于這樣的事情:


df['C'] = [{'example':5} if a==1 else c for a,c in zip(df['A'], df['C'])]

將為各個行創建不同的副本。{'example':5'}


查看完整回答
反對 回復 2023-10-05
?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

您可以使用np.where:


df['C'] = np.where(df['A']==1, {'example': 5}, df['C'])

print(df)

印刷:


   A  B               C

0  1  4  {'example': 5}

1  1  5  {'example': 5}

2  1  6  {'example': 5}

3  2  7            None

4  2  8            None

5  2  9            None


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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