假设我有这样一个数据集。

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/

10-12 17:50
查看更多