我有一个 Excel 文件,其中一列有多个值,用逗号分隔(请参阅附图)
对于 StuType 列,数字从 1 一直到 13,包括一些空白行(如 ResponseID = 8538 和 8562 所示)。
我正在将文件读入 pandas。目标是拥有 13 个不同的列,其中的值为 0 和 1。我的问题与这个one非常相似,但是,那里建议的两种解决方案都不适合我。
有人可以帮助我吗?非常感谢!
如果您输入的数据框是:
Response StuType
0 8524 5,8
1 8528 10
2 8538 12
3 8548 2,5,10
4 8558 13
5 8568 None
6 8578 7
7 8588 12
8 8598 5
9 8608 13
10 8618 13
11 8628 None
12 8638 5,8,10,11
那么你可以尝试:
df["StuType"] = df["StuType"].fillna("").str.split(r"\s*,\s*", regex=True)
df = pd.concat(
[
df,
pd.DataFrame(
[{int(x): 1 for x in t if x} for t in df.pop("StuType")], index=df.index
)
.reindex(columns=range(1, 14))
.sort_index(axis=1)
.fillna(0)
.astype(int),
],
axis=1,
)
print(df)
打印:
Response 1 2 3 4 5 6 7 8 9 10 11 12 13
0 8524 0 0 0 0 1 0 0 1 0 0 0 0 0
1 8528 0 0 0 0 0 0 0 0 0 1 0 0 0
2 8538 0 0 0 0 0 0 0 0 0 0 0 1 0
3 8548 0 1 0 0 1 0 0 0 0 1 0 0 0
4 8558 0 0 0 0 0 0 0 0 0 0 0 0 1
5 8568 0 0 0 0 0 0 0 0 0 0 0 0 0
6 8578 0 0 0 0 0 0 1 0 0 0 0 0 0
7 8588 0 0 0 0 0 0 0 0 0 0 0 1 0
8 8598 0 0 0 0 1 0 0 0 0 0 0 0 0
9 8608 0 0 0 0 0 0 0 0 0 0 0 0 1
10 8618 0 0 0 0 0 0 0 0 0 0 0 0 1
11 8628 0 0 0 0 0 0 0 0 0 0 0 0 0
12 8638 0 0 0 0 1 0 0 1 0 1 1 0 0