拆分 pandas 列并创建包含这些拆分值计数的新列

问题描述 投票:0回答:1

我有一个 Excel 文件,其中一列有多个值,用逗号分隔(请参阅附图

Excel screenshot

对于 StuType 列,数字从 1 一直到 13,包括一些空白行(如 ResponseID = 8538 和 8562 所示)。

我正在将文件读入 pandas。目标是拥有 13 个不同的列,其中的值为 0 和 1。我的问题与这个one非常相似,但是,那里建议的两种解决方案都不适合我。

有人可以帮助我吗?非常感谢!

python pandas
1个回答
0
投票

如果您输入的数据框是:

    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
© www.soinside.com 2019 - 2024. All rights reserved.