python - 根据值是否位于另一列的列表中,用 0 或 1 填充空 (NaN) 列

标签 python pandas dataframe

我有以下数据框:

import pandas as pd
import numpy as np

df = pd.DataFrame({'Q1': ['A,B', 'A,C', 'A,B', 'B,C', 'A,B,C','C,B,A','B,C,A'],
               'Q2': ['B,A', 'C,A', 'B,C,A', 'A,B', 'A,C', 'B,C','C,B'], 
               'Q3': ['C,A', 'C,B', 'A,B', 'C,B', 'A,B,C','A,B,C','C,A']})

df['Q1'] = df['Q1'].apply(lambda x: x.split(','))
df['Q2'] = df['Q2'].apply(lambda x: x.split(','))
df['Q3'] = df['Q3'].apply(lambda x: x.split(','))

colQ1 = df["Q1"].explode().unique()
colQ1df = pd.DataFrame(columns = colQ1)

df = pd.concat([df, colQ1df], sort=False)

print(df)

如果列“Q1”包含“A”,我想用“1”填充新列“A”,如果不包含“A”,则填充 0。

最佳答案

不要爆炸值,最好使用Series.str.get_dummiesconcat如果需要以相同的方式处理每一列:

df = pd.DataFrame({'Q1': ['A,B', 'A,C', 'A,B', 'B,C', 'A,B,C','C,B,A','B,C,A'],
               'Q2': ['B,A', 'C,A', 'B,C,A', 'A,B', 'A,C', 'B,C','C,B'], 
               'Q3': ['C,A', 'C,B', 'A,B', 'C,B', 'A,B,C','A,B,C','C,A']})

df = pd.concat([df[x].str.get_dummies(',') for x in df], keys=df.columns, axis=1)
df.columns = df.columns.map('_'.join)
print (df)
   Q1_A  Q1_B  Q1_C  Q2_A  Q2_B  Q2_C  Q3_A  Q3_B  Q3_C
0     1     1     0     1     1     0     1     0     1
1     1     0     1     1     0     1     0     1     1
2     1     1     0     1     1     1     1     1     0
3     0     1     1     1     1     0     0     1     1
4     1     1     1     1     0     1     1     1     1
5     1     1     1     0     1     1     1     1     1
6     1     1     1     0     1     1     1     0     1

如果希望每列分隔 Dataframe:

df1 = df['Q1'].str.get_dummies(',')
print (df1)
 A  B  C
0  1  1  0
1  1  0  1
2  1  1  0
3  0  1  1
4  1  1  1
5  1  1  1
6  1  1  1

关于python - 根据值是否位于另一列的列表中,用 0 或 1 填充空 (NaN) 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60971190/

相关文章:

c++ - 基于 Python 的游戏——它们是如何制作的?

python - 列规范不匹配,因此使用 pd.read_fwf 和使用 colspecs 读取错误的值

python - 在 Plotly Express 中使用 Pandas 索引

r - 根据来自不同列的位置计算数据框中的平均值

python - Pandas 显示 DataFrame 而不进行换行

python pip : Can't install matplotlib (ConnectTimeoutError)

python - 调用函数后,GCP Composer/Airflow 无法识别 DAG

python - 使用 Keras (PIL) 和 TensorFlow 调整图像大小不一致?

python - Pandas 根据另一列的字典值添加列

python - 如何将数据框拆分为两行,其中两列具有特定值?