我有一个如下所示的数据框:
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
对正确方向的任何建议将不胜感激!谢谢!
答案 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
如您所愿 int
和 0
值:
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