Jar*_*rad 4 python grouping text pandas
df = pd.DataFrame({'Col1': ['label1', 'label1', 'label2', 'label2',
'label3', 'label3', 'label4'],
'Col2': ['a', 'd', 'b', 'e', 'c', 'f', 'q']}, columns=['Col1', 'Col2'])
Run Code Online (Sandbox Code Playgroud)
看起来像这样
Col1 Col2
0 label1 a
1 label1 d
2 label2 b
3 label2 e
4 label3 c
5 label3 f
6 label4 q
Run Code Online (Sandbox Code Playgroud)
对于其中的唯一值Col1,我想将列的唯一值转换为列.从某种意义上说,我试图将" Col1取消堆叠" 值作为列标题,行值将是其中的值Col2.我的关键主要问题是我不是在计算任何数字数据 - 它都是文本 - 而我只是试图重塑结构.
这是期望的结果:
label1 label2 label3 label4
0 a b c q
1 d e f NaN
Run Code Online (Sandbox Code Playgroud)
我试过: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]
Run Code Online (Sandbox Code Playgroud)
这个问题展示了如何使用数据透视表 ...但我的情况下的数字索引不是我关心的事情.
您可以使用cumcount为new创建列index,然后pivot_table使用聚合join:
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
Run Code Online (Sandbox Code Playgroud)
感谢您的评论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
Run Code Online (Sandbox Code Playgroud)
要么:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
533 次 |
| 最近记录: |