假设我有这样一个数据集。
ID Item
1 A
2 B
3 A
1 C
2 B
2 B
1 A
3 B
实际的数据集有5万行和8.5千个不同的项值。
现在我想将每个Id的行转换成列,这样我们就可以为每个用户计算每个项的值。如下所示
ID A B C
1 2 0 1
2 0 3 0
3 1 1 0
现在,如果我有喜欢的项目值集编号,我可以硬编码,以防聚合语句。
有点像
select ID, count(case when Item ='A' then 1 else Null end) A,
count(case when Item='B' then 1 else Null end) B... and so on.
但在这种情况下,我有8.5公里独特的项目。这将是太多的任务,做以上在sql。
我如何实现这一点是Sql和I I)Python。请记住,我有5万行和8.5万个独特项,所以python循环可能会变得有点慢。
但我的第一个目标是在sql中这样做,因为这是一个50K的示例数据。当数据增长到更大时,sql仍然能够很好地保存它,但是python会变得很慢。在python中,我也可以尝试一些代码。但是当数据超过50K obs时,python也会变得很慢
请告知
不使用Postgresql和HANA,因此Postgres特有的函数可能无法工作。请推荐通用的sql方式。
最佳答案
如果您确实想在python中这样做,那么应该查看pandas
库
df = pd.DataFrame({
'ID': [1, 2, 3, 1, 2, 2, 1, 3],
'Item': ['A', 'B', 'A', 'C', 'B', 'B' , 'A', 'B']
})
pd.crosstab(df['ID'], df['Item'])
输出:
Item A B C
ID
1 2 0 1
2 0 3 0
3 1 1 0
关于python - 将太多值的行转换为列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37424842/