Pandas 双列数据帧分类行

Pandas 双列数据帧分类行,pandas,numpy,dataframe,Pandas,Numpy,Dataframe,我有一个包含两列、值和类别的数据框架。我需要将数据帧转换为每个值有一行,相关类别的值为1或0 因此: +--------+--------------+ | value | category | +--------+--------------+ | 1 | 32 | | 1 | 33 | | 1 | 34 | | 1 | 35 | | 2 |

我有一个包含两列、值和类别的数据框架。我需要将数据帧转换为每个值有一行,相关类别的值为1或0

因此:

+--------+--------------+
| value  |   category   |
+--------+--------------+ 
|   1    |      32      |
|   1    |      33      |
|   1    |      34      |
|   1    |      35      |
|   2    |      32      |
|  ...   |      ...     |
+--------+--------------+
为此:

+--------+----+----+----+----+
| value  | 32 | 33 | 34 | 35 |
+--------+----+----+----+----+
|   1    |  1 |  1 |  1 |  1 |
|   2    |  1 |  0 |  0 |  0 |
+--------+----+----+----+----+

我尝试使用嵌套循环来实现这一点,但速度太慢了。有更好的方法吗?

这应该有效,接受
@ALollz
建议并重置索引

import pandas as pd
raw_data = {'value':      [1, 1, 1, 2, 2],
            'category':     [32, 33, 34, 35, 36]}

df = pd.DataFrame(raw_data)
df = pd.crosstab(df.value, df.category).clip(upper=1)
df.reset_index(drop=True)

这应该有效,采取
@ALollz
建议并重置索引

import pandas as pd
raw_data = {'value':      [1, 1, 1, 2, 2],
            'category':     [32, 33, 34, 35, 36]}

df = pd.DataFrame(raw_data)
df = pd.crosstab(df.value, df.category).clip(upper=1)
df.reset_index(drop=True)

pd.crosstab(df.value,df.category).clip(upper=1)
pivot
。我认为这不管用。想详细说明一下pivot吗?可能不值得,因为如果
交叉表
在某种程度上不起作用(尽管它确实再现了您的预期输出),那么我提出的所有其他解决方案都将同样失败,因为它们都只是做完全相同事情的10种不同方法。只是有些人使用了
groupby
,其他人使用了
pivot
其他人
get_dummies
,但结果都是一样的。也就是说,如果
crosstab
没有真正起作用,你能提供一个说明这不是理想解决方案的例子吗?
pd.crosstab(df.value,df.category).clip(上限=1)
pivot
。我认为这不管用。想详细说明一下pivot吗?可能不值得,因为如果
交叉表
在某种程度上不起作用(尽管它确实再现了您的预期输出),那么我提出的所有其他解决方案都将同样失败,因为它们都只是做完全相同事情的10种不同方法。只是有些人使用
groupby
,其他人使用
pivot
其他人
get_dummies
,但结果都是一样的。也就是说,如果
交叉表
没有真正起作用,你能提供一个说明这不是理想解决方案的例子吗?