如何使用熊猫从现有列中的值创建新的二分列

时间:2021-07-30 07:32:54

标签: python pandas

我有一个如下所示的数据框:

ID       type       period
1        2          3
1        2          3
1        3          3
2        2          3
2        3          2
2        3          2
3        2          2

总共有X个类型和X个周期。并非所有类型/句点都会被使用,但我需要为每个类型的所有 X 创建列,以便从 Pandas 导入时表不会在数据库中中断。 (假设本例中的 X 是 3,但实际上是 9,只是在本例中缩短了。)

对于每个 ID,我需要一个 0 来显示该类型/句点是否存在,一个 1 来显示它是否存在。

所需的数据框如下所示:

ID   type_1   type_2   type_3   period_1   period_2   period_3
1    0        1        1        0          0          1
2    0        1        1        0          1          1
3    0        1        0        0          1          0

对正确方向的任何建议将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:1)

来自您的DataFrame

>>> import pandas as pd
>>> from io import StringIO

>>> df = pd.read_csv(StringIO("""
ID       type       period
1        2          3
1        2          3
1        3          3
2        2          3
2        3          2
2        3          2
3        2          2"""), sep='       ')
>>> df
    ID  type    period
0   1   2       3
1   1   2       3
2   1   3       3
3   2   2       3
4   2   3       2
5   2   3       2
6   3   2       2

我们可以在列 'ID' 和 'type' 上使用 groupby 来提取它们的 size,然后 unstack 结果,用零填充 NaN,最后将其转换为 {{1 }} 和 bool 如您所愿 int0 值:

1

对于 >>> df.groupby(['ID','type']).size().unstack(fill_value=0).astype(bool).astype(int) type 2 3 ID 1 1 1 2 1 1 3 1 0 列:

period