将Python Pandas中堆叠的唯一列值解构为自己的列

14 浏览
0 Comments

将Python Pandas中堆叠的唯一列值解构为自己的列

df = pd.DataFrame({'Col1': ['label1', 'label1', 'label2', 'label2',

'label3', 'label3', 'label4'],

'Col2': ['a', 'd', 'b', 'e', 'c', 'f', 'q']}, columns=['Col1', 'Col2'])

看起来是这样的:

Col1 Col2

0 label1 a

1 label1 d

2 label2 b

3 label2 e

4 label3 c

5 label3 f

6 label4 q

对于Col1中的唯一值,我想将一列的唯一值转换为列。某种意义上说,我想要将Col1的值“展开”成列标题,行值将成为Col2中的值。我的主要问题是我没有计算任何数值数据 - 它们都是文本 - 我只是尝试重塑结构。

这是期望的结果:

label1 label2 label3 label4

0 a b c q

1 d e f NaN

我尝试过stack、unstack、pd.melt、pivot_table和pivot。这几乎能达到目标,但还不够简洁,并且似乎不太合适:

df.groupby('Col1').apply(lambda x: x['Col2'].values).to_frame().T

Col1 label1 label2 label3 label4

0 [a, d] [b, e] [c, f] [q]

这个问题展示了如何使用透视表来解决问题.. 但是我不关心数值索引。

这个问题展示了如何使用透视表来解决问题.. 使用aggfunc first或' '.join,但返回的是CSV而不是各行上的值。

0
0 Comments

问题的出现是因为需要将一个DataFrame中的唯一列值拆分成它们自己的列。解决方法是使用`groupby`和`cumcount`方法创建一个新的索引列,并使用`pivot_table`方法进行聚合。

首先,使用`groupby`和`cumcount`方法创建一个新的索引列`g`:

df['g'] = df.groupby('Col1')['Col1'].cumcount()

然后,使用`pivot_table`方法,并通过`index`参数指定新创建的索引列`g`,通过`columns`参数指定原始列`Col1`,通过`values`参数指定原始列`Col2`,通过`aggfunc`参数指定聚合函数`join`:

print (df.pivot_table(index='g', columns='Col1', values='Col2', aggfunc=''.join))

以上代码的输出结果如下:

Col1 label1 label2 label3 label4
g                               
0         a      b      c      q
1         d      e      f   None

另外,也可以使用`pivot`方法来实现相同的结果,代码如下:

print (df.pivot(index='g', columns='Col1', values='Col2'))

最后,还可以使用一行更简洁的代码实现相同的结果:

print (pd.pivot(index=df.groupby('Col1')['Col1'].cumcount(),
                columns=df['Col1'], 
                values=df['Col2']))

以上就是将Python Pandas中唯一列值拆分成它们自己的列的方法。

0
0 Comments

Python Pandas的“unstack”方法可以将唯一的列值转换为自己的列。这个问题的出现是因为数据框中的列"Col1"中有许多唯一的值,我们想要将这些唯一值作为新的列,并将它们的值与另一列"Col2"相关联。

为了解决这个问题,我们可以使用"set_index"方法来设置索引,然后使用"unstack"方法将唯一的列值转换为新的列。具体的解决方法如下所示:

df.set_index([df.groupby('Col1')['Col1'].cumcount(), 'Col1'])['Col2'].unstack()

上述代码将数据框"df"的"Col1"列进行分组,并使用"cumcount"方法为每个分组的唯一值分配一个序号。然后,使用"set_index"方法将这两列设置为索引,最后使用"unstack"方法将唯一的列值转换为新的列。输出结果如下所示:

Col1 label1 label2 label3 label4
0         a      b      c      q
1         d      e      f   None

这样,我们就成功将唯一的列值转换为了新的列,并将它们的值与另一列"Col2"相关联。

0