使用重复的键值来重塑/透视键-值对的数据文件

时间:2018-09-24 21:46:40

标签: python pandas dataframe pivot

我找到了许多标题相似的问题,但找不到确切的问题。

我有一个像这样的数据文件:

title1:A1
title2:A2
title3:A3
title4:A4
title5:A5

title1:B1
title2:B2
title3:B3
title4:B4
title5:B5

title1:C1
title2:C2
title3:C3
title4:C4
title5:C5

title1:D1
title2:D2
title3:D3
title4:D4
title5:D5

使用大熊猫,我想要一张这样的桌子:

    title1  title2  title3  title4  title5
0   A1  A2  A3  A4  A5
1   B1  B2  B3  B4  B5
2   C1  C2  C3  C4  C5
3   D1  D2  D3  D4  D5

我的尝试

import pandas as pd
import numpy as np

df = pd.read_csv('colon_sep.txt',header=None,sep=':')
df.columns = ['title','id']

# for loop method
df2 = pd.DataFrame()
for t in df.title.unique():
    df2[t] = df[df.title == t]['id'].values
df2
# HOW TO GET THIS BY Advanced methods?

我能够使用for循环获取所需的表。

使用groupby或其他任何高级方法还有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

您可以稍微简化代码,以在结尾处添加一个<style scoped> html { height: 100%; } body { height: calc(100% - 100px); } .contents { padding: 30px; box-sizing: border-box; } .demo-grid { width: 100%; height: 300px; box-sizing: border-box; border: solid 1px #ddd; } .demo-grid.large { height: 500px; } .demo-grid.middle { height: 300px; } .demo-grid.small { height: 240px; } .log { width: 100%; height: 80px; background-color: #F5F5F5; } .hljs { tab-size: 4; } </style> 调用以提高效率:

pivot

df = pd.read_csv('colon_sep.txt', sep=':', header=None)
df.insert(2, 2, df.groupby(0).cumcount())  
df = df.pivot(index=2, columns=0, values=1)

答案 1 :(得分:0)

完成之后

df = pd.read_csv('colon_sep.txt',header=None,sep=':')

您可以

df= pd.DataFrame({name:list(column[0]) for name,column in dfc.groupby(dfc.index)})

或者,如果您将数据包含在名为text的字符串中,则可以进行

df = pd.DataFrame([[line.split(':')[1] for line in lines.split('\n')] for lines in text.split('\n\n')])`

您可以使用

获取列名
df.columns = [line.split(':')[0] for line in text.split('\n\n')[0].split('\n')]