簡體   English   中英

根據 pandas 上另一列值的值創建一列

[英]Create a column based on a value from another columns values on pandas

我是 python 和 pandas 的新手,我遇到了一個問題

這是一個數據集

data = {'col1': ['a','b','a','c'], 'col2': [None,None,'a',None], 'col3': [None,'a',None,'b'], 'col4': ['a',None,'b',None], 'col5': ['b','c','c',None]}
df = pd.DataFrame(data)

我需要根據 col1 到 col4 的唯一值創建 3 列,每當 col1 或 col2 或 col3 或 col4 的值等於新列的 header 時,它應該返回 1,否則它應該返回 0

需要這樣的 output

數據集 output 示例:

data = {'col1': ['a','b','a','c'], 'col2': [None,None,'a',None], 'col3': [None,'a',None,'b'], 'col4': ['a',None,'b',None], 'col5': ['b','c','c',None], 'a':[1,1,1,0],'b':[0,1,1,1],'c':[0,1,1,1]}
df = pd.DataFrame(data)

我能夠使用下面的代碼創建一個新列並將其設置為 1

df['a'] = 0
df['a'] = (df['col1'] == 'a').astype(int)

但它只適用於第一列,我必須對所有列重復它。

有沒有辦法讓它同時發生在所有列上?

檢查pd.get_dummiesgroupby

df = pd.concat([df,
                pd.get_dummies(df,prefix='',prefix_sep='').groupby(level=0,axis=1).max()],
                axis=1)
Out[377]: 
  col1  col2  col3  col4  col5  a  b  c
0    a  None  None     a     b  1  1  0
1    b  None     a  None     c  1  1  1
2    a     a  None     b     c  1  1  1
3    c  None     b  None  None  0  1  1
pd.concat([df, pd.get_dummies(df.stack().droplevel(1)).groupby(level=0).max()], axis=1)

結果:

   col1 col2    col3    col4    col5    a   b   c
0   a   None    None    a       b       1   1   0
1   b   None    a       None    c       1   1   1
2   a   a       None    b       c       1   1   1
3   c   None    b       None    None    0   1   1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM