从逗号分隔的字符串中获取列,考虑每一行的值

get columns from string separated by comma, considering the values for each row

我想将逗号分隔的字符串或列表转换为列,如下所示

column1 | column2 |    column3   |
A       |    X    | [1, 2, 3]    |    
B       |    Y    | [1, 4, 5, 8] |   
C       |    Z    |  [5, 1]      |   
D       |    T    |    [4, 3]    | 

column1 | column2 |  column3  |
A       |    X    |   1,2,3   |    
B       |    Y    |  1,4,5,8  | 
C       |    Z    |    5,1    |   
D       |    T    |    4,3    |

column1 | column2 |  1  |  2  |  3  |  4  |  5  |  8  |
A       |    X    |  1  |  1  |  1  |  0  |  0  |  0  |  
B       |    Y    |  1  |  0  |  0  |  1  |  1  |  1  |
C       |    Z    |  1  |  0  |  0  |  0  |  1  |  0  |
D       |    T    |  0  |  0  |  1  |  1  |  0  |  0  |

提前致谢

在第二种情况下,您可以使用 Series.str.get_dummies 轻松地 one-hot 编码 column3 列。 然后使用 Dataframe.join 将生成的 one-hot 编码列连接到原始 DataFrame。

import pandas as pd 

df = pd.DataFrame({
 'column1': ['A', 'B', 'C', 'D'],
 'column2': ['X', 'Y', 'Z', 'T'],
 'column3': ['1,2,3', '1,4,5,8', '5,1', '4,3']
})

res = (
    df.drop(columns='column3')
      .join(df['column3'].str.get_dummies(sep=','))
)

输出:

>>> res 

  column1 column2  1  2  3  4  5  8
0       A       X  1  1  1  0  0  0
1       B       Y  1  0  0  1  1  1
2       C       Z  1  0  0  0  1  0
3       D       T  0  0  1  1  0  0

在第一种情况下,假设 column3 包含整数列表,您可以执行与上述相同的操作,但首先将 column3 的值转换为 comma-separated 字符串。例如使用 Series.apply

df['column3'] = df['column3'].apply(lambda lst_nums: ','.join(map(str, lst_nums)))

如果 column3 的值是字符串列表,您可以使用 Series.str.join 代替

df['column3'] = df['column3'].str.join(',')