当前位置: 首页 > 知识库问答 >
问题:

Python将唯一的列值解压到自己的列中

林鸿彩
2023-03-14
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

我试过:堆栈卸载pd.meltpivot_table枢轴

这几乎让我到达那里,但不完全是,而且似乎不是很简洁:

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或< code > ' '。join,但它返回CSV而不是各行上的值。

共有2个答案

壤驷高洁
2023-03-14

使用< code>set_index和< code>unstack,您可以

In [17]: df.set_index([df.groupby('Col1')['Col1'].cumcount(), 'Col1'])['Col2'].unstack()
Out[17]:
Col1 label1 label2 label3 label4
0         a      b      c      q
1         d      e      f   None

细节

In [18]: df
Out[18]:
     Col1 Col2
0  label1    a
1  label1    d
2  label2    b
3  label2    e
4  label3    c
5  label3    f
6  label4    q
陆宏壮
2023-03-14

您可以使用Cumcount为新index创建列,然后pivot_table聚合加入

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

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

感谢您的评论Jeff L.

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

print (df.pivot(index='g', columns='Col1', values='Col2'))
Col1 label1 label2 label3 label4
g                               
0         a      b      c      q
1         d      e      f   None

艺术

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

Col1 label1 label2 label3 label4
0         a      b      c      q
1         d      e      f   None
 类似资料:
  • 问题内容: 会根据其位置而不是其值来生成其元素被视为唯一的元素。所以基本上我想避免重复这样的事情: 之后的过滤是不可能的,因为在我的情况下,排列的数量太大。 有人知道合适的算法吗? 非常感谢你! 编辑: 我基本上想要的是以下内容: 这是不可能的,因为sorted创建列表并且itertools.product的输出太大。 抱歉,我应该已经描述了实际问题。 问题答案: 结果: 编辑(这是如何工作的):

  • 问题内容: 我已经在处理以下代码,但是似乎找不到一种方法来计算字谜列表中唯一值的数量。如果我只是打印出:我会得到列表的总价值,但其中包括重复项。 我试图将列表转换为集合,然后再删除掉重复项,但是还没有任何运气。 谢谢! 问题答案: 使用。仅包含唯一值:

  • 问题内容: 我想创建一个(或一组)所有出现在python列表中的唯一值的列表。我有这样的事情: 我想要以下内容: 我知道对于字符串列表,您只能使用set(aList),但是我无法弄清楚如何在列表列表中解决此问题,因为set(aList)会向我显示错误消息 我该如何解决? 问题答案:

  • 问题内容: 我有一个这样的熊猫数据框: 我现在想做的是获取一个包含Column1和新columnA的新数据框。此columnA应该包含第2列-(to)n的所有值(其中n是从Column2到行尾的列数),如下所示: 我如何最好地解决这个问题?任何意见将是有益的。提前致谢! 问题答案: 您可以按行调用pass ,然后将dtype转换为和: 在这里,我呼吁摆脱,但是我们需要再次强制转换为,这样我们才不会

  • 问题内容: 我很好奇将这种数据对象唯一化的有效方法: 对于每个数据对,左边的数字字符串加上右边的类型说明了数据元素的唯一性。返回值应为与testdata相同的列表列表,但仅保留唯一值。 问题答案: 您可以使用一组: 您还可以看到此页面,该页面对各种保留或不保留顺序的方法进行了基准测试。

  • 问题内容: 我想从以下列表中获取唯一值: 我需要的输出是: 此代码有效: 我应该使用更好的解决方案吗? 问题答案: 首先正确声明你的列表,以逗号分隔。你可以通过将列表转换为一组来获得唯一值。 如果进一步将其用作列表,则应执行以下操作将其转换回列表: 另一种可能(可能更快)的可能性是从头开始使用集合而不是列表。然后你的代码应为: 正如已经指出的那样,集合不保持原始顺序。如果需要,则应查找有序集合实现