Pandas 双列数据帧分类行
我有一个包含两列、值和类别的数据框架。我需要将数据帧转换为每个值有一行,相关类别的值为1或0 因此:Pandas 双列数据帧分类行,pandas,numpy,dataframe,Pandas,Numpy,Dataframe,我有一个包含两列、值和类别的数据框架。我需要将数据帧转换为每个值有一行,相关类别的值为1或0 因此: +--------+--------------+ | value | category | +--------+--------------+ | 1 | 32 | | 1 | 33 | | 1 | 34 | | 1 | 35 | | 2 |
+--------+--------------+
| 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
,但结果都是一样的。也就是说,如果交叉表
没有真正起作用,你能提供一个说明这不是理想解决方案的例子吗?