python - 根据 ID 状态转换数据帧
问题描述
我有以下数据框
USER_ID MONTH STATUS_ID
0 23026 2019-09-01 2
1 23026 2019-10-01 2
2 23026 2019-11-01 2
3 23026 2019-12-01 2
4 23027 2019-09-01 2
... ... ... ...
123 16546 2018-10-01 2
124 16622 2018-09-01 1
125 16622 2018-10-01 1
126 16622 2018-11-01 1
127 16622 2018-12-01 1
所有用户都应该有 4 行(4 个月),但期间可以不同(01.02.2018 -01.05.2018 或 01.02.2019 - 01.05.2019 ...)
我想像这样转变
USER_ID MONTH_1 MONTH_2 MONTH_3 MONTH_4
0 23026 2 2 2 2
1 23027 2 2 2 2
... ... ... ...
123 16546 2 2 1 1
124 16622 1 1 1 1
最后一件事我应该根据 STATUS ID 转换数据框
USER_ID ID
0 23026 2
1 23027 2
... ... ... ...
123 16546 2
124 16622 1
这是不同月份 ID 之间的一种布尔运算。知道如何改变这个吗?还是可以更有效地解决这个问题?
解决方案
我认为可能的解决方案是通过计数创建新列GroupBy.cumcount
并传递给DataFrame.pivot
:
print (df)
USER_ID MONTH STATUS_ID
0 23026 2019-09-01 2
1 23026 2019-10-01 2
2 23026 2019-11-01 2
3 23026 2019-12-01 2
123 16546 2018-09-01 2
123 16546 2018-10-01 2
123 16546 2018-11-01 1
123 16546 2018-12-01 1
124 16622 2018-09-01 1
125 16622 2018-10-01 1
126 16622 2018-11-01 1
127 16622 2018-12-01 1
df['MONTH1'] = 'MONTH_' + df.groupby('USER_ID').cumcount().add(1).astype(str)
df = df.pivot('USER_ID','MONTH1','STATUS_ID')
print (df)
MONTH1 MONTH_1 MONTH_2 MONTH_3 MONTH_4
USER_ID
16546 2 2 1 1
16622 1 1 1 1
23026 2 2 2 2
然后比较 by1
并测试每行DataFrame.eq
是否至少有一个by , last并转换为:True
DataFrame.any
map
DataFrame
df1 = df1.eq(1).any(axis=1).map({True:1, False:2}).reset_index(name='ID')
print (df1)
USER_ID ID
0 16546 1
1 16622 1
2 23026 2
详情:
print (df1.eq(1))
MONTH1 MONTH_1 MONTH_2 MONTH_3 MONTH_4
USER_ID
16546 False False True True
16622 True True True True
23026 False False False False
推荐阅读
- javascript - 如何在我的 JS 中的 eventListener 之前加载我的生成 dom 函数
- redirect - 用于 301 和 302 响应的 API 网关缓存
- android - 在 RecyclerView 适配器中单击按钮返回值
- laravel - 如何访问 apache 虚拟主机中的 laravel api?
- typo3 - 启用选择和上传文件
- java - Primefaces PDFExporter 在 PDF 中将非 ASCII 字母显示为垃圾
- python - 如何根据 pandas 中列的数据类型用适当的值填充空值?
- javascript - 无法使用位置:粘性;通过 .innerHTML 添加元素时
- office-ui-fabric - 如何使用 fluentUI / office-ui-fabric 中的 DragDropHelper?
- python - 如何在 python 中针对列和行迭代二维矩阵?