我有這個資料框:
classification text apple banana peach grape
["apple","grape"] anytext NaN NaN NaN NaN
如何檢查列名是否在classification列中,以獲得:
classification text apple banana peach grape
["apple","grape"] anytext 1 0 0 1
資料:
{'classification': [['apple', 'grape']],
'text': ['anytext'],
'apple': [nan],
'banana': [nan],
'peach': [nan],
'grape': [nan]}
uj5u.com熱心網友回復:
您可以在“分類”上應用 lambda 函式,以檢查其中的專案是否作為列名存在:
cols = ['apple','banana','peach','grape']
df[cols] = df['classification'].apply(lambda x: [1 if col in x else 0 for col in cols]).tolist()
另一種選擇是explode 獲得一個空白系列,其中stackMultiIndexfillna由索引、“分類”和df. 然后評估“分類”中的任何專案是否作為列名存在,創建一個系列,unstack 構建一個groupbyDataFramesum以分配回df:
tmp = df.explode('classification')
s = tmp.set_index([tmp.index, tmp['classification']])[cols].fillna(0).stack()
s = pd.Series((s.index.get_level_values(1)==s.index.get_level_values(2)).astype(int), index=s.index)
df[cols] = s.unstack().groupby(level=0).sum()
然而更簡單的是使用explode 將“分類”中的專案作為虛擬變數,然后使用它進行更新pd.get_dummies:groupbysumdffillna
df[cols] = df[cols].fillna(pd.get_dummies(df['classification'].explode()).groupby(level=0).sum()).fillna(0)
輸出:
classification text apple banana peach grape
0 [apple, grape] anytext 1 0 0 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/433574.html
標籤:Python python-3.x 熊猫 数据框
上一篇:改變列名的結構
