Python 对一列进行编码,其中的值基于其他列
我试图对一列进行编码,其中值基于另一列,而不是0-1 例如,我的原始表如下所示:Python 对一列进行编码,其中的值基于其他列,python,pandas,Python,Pandas,我试图对一列进行编码,其中值基于另一列,而不是0-1 例如,我的原始表如下所示: +-------+-------+-------+ |第1列|第2列|第3列| +-------+-------+-------+ |1 | A | 1| |1 | B | 2| |1 | E | 3| |2 | C | 4| |2 | D | 5| |3 | A | 6| |3 | B | 7| |3 | D | 8| |3 | E | 9| +-------+-------+-------+ 预期产量为 +-
+-------+-------+-------+
|第1列|第2列|第3列|
+-------+-------+-------+
|1 | A | 1|
|1 | B | 2|
|1 | E | 3|
|2 | C | 4|
|2 | D | 5|
|3 | A | 6|
|3 | B | 7|
|3 | D | 8|
|3 | E | 9|
+-------+-------+-------+
预期产量为
+-------+--------+--------+--------+--------+--------+
|Col1 | Col2|u A | Col2|u B | Col2|u C | Col2|u D | Col2|E|
+-------+--------+--------+--------+--------+--------+
| 1 | 1 | 2 | 0 | 0 | 3 |
| 2 | 0 | 0 | 4 | 5 | 0 |
| 3 | 6 | 7 | 0 | 8 | 9 |
+-------+--------+--------+--------+--------+--------+
我想不出如何用熊猫来解决这个问题。
非常感谢您的帮助 使用
设置索引
和取消堆栈
df.set_index(['Col 1', 'Col 2'])['Col 3'].unstack(fill_value=0)
Col 2 A B C D E
Col 1
1 1 2 0 0 3
2 0 0 4 5 0
3 6 7 0 8 9
或者再添加一些位来复制OP的精确预期输出
df.set_index(['Col 1', 'Col 2'])['Col 3'].unstack(fill_value=0) \
.rename_axis(None, 1).add_prefix('Col2_').reset_index()
Col 1 Col2_A Col2_B Col2_C Col2_D Col2_E
0 1 1 2 0 0 3
1 2 0 0 4 5 0
2 3 6 7 0 8 9
一个简单的支点,即
df.pivot('Col 1','Col 2','Col 3').fillna(0)
或者使用枢轴
df.pivot('Col 1', 'Col 2', 'Col 3').fillna(0).rename_axis(None, 1).add_prefix('Col2_').reset_index()
第1列第2列第2列第2列第2列第2列第2列第2列第2列第2列第2列
0 1 1.0 2.0 0.0 0.0 3.0
1 2 0.0 0.0 4.0 5.0 0.0
2 3 6.0 7.0 0.0 8.0 9.0
这是我今天第三次使用交叉表
pd.crosstab(index=df['Col 1'],columns=df['Col 2'],values=df['Col 3'],aggfunc=sum).\
fillna(0).rename_axis(None, 1).add_prefix('Col2_').reset_index()
您可以使用
pivot\u表
并利用其fill\u值
参数df.pivot\u表('Col 3','Col 1','Col 2',fill\u值=0)。重命名轴(None,1)。添加\u前缀('Col2\u')。重置\u索引()
这相对简单。假设您的DataFrame
是df
,并且您有一列Foo
,其中Foo=Bar*2
。您的代码将是df['Foo']=df['Bar'].apply(lambda x:x*2)
。
df.pivot('Col 1', 'Col 2', 'Col 3').fillna(0).rename_axis(None, 1).add_prefix('Col2_').reset_index()
Col 1 Col2_ A Col2_ B Col2_ C Col2_ D Col2_ E
0 1 1.0 2.0 0.0 0.0 3.0
1 2 0.0 0.0 4.0 5.0 0.0
2 3 6.0 7.0 0.0 8.0 9.0
pd.crosstab(index=df['Col 1'],columns=df['Col 2'],values=df['Col 3'],aggfunc=sum).\
fillna(0).rename_axis(None, 1).add_prefix('Col2_').reset_index()