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.melt
,pivot_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而不是各行上的值。
使用< 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
您可以使用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相同的列表列表,但仅保留唯一值。 问题答案: 您可以使用一组: 您还可以看到此页面,该页面对各种保留或不保留顺序的方法进行了基准测试。
问题内容: 我想从以下列表中获取唯一值: 我需要的输出是: 此代码有效: 我应该使用更好的解决方案吗? 问题答案: 首先正确声明你的列表,以逗号分隔。你可以通过将列表转换为一组来获得唯一值。 如果进一步将其用作列表,则应执行以下操作将其转换回列表: 另一种可能(可能更快)的可能性是从头开始使用集合而不是列表。然后你的代码应为: 正如已经指出的那样,集合不保持原始顺序。如果需要,则应查找有序集合实现