Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对一列进行编码,其中的值基于其他列_Python_Pandas - Fatal编程技术网

Python 对一列进行编码,其中的值基于其他列

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| +-------+-------+-------+ 预期产量为 +-

我试图对一列进行编码,其中值基于另一列,而不是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|
+-------+-------+-------+

预期产量为

+-------+--------+--------+--------+--------+--------+
|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()