Pandas:基于ID将列转换为行

3

我是pandas的新手,

我有以下数据框:

df = pd.DataFrame([[1, 'name', 'peter'], [1, 'age', 23], [1, 'height', '185cm']], columns=['id', 'column','value'])

    id  column  value
0   1   name    peter
1   1   age     23
2   1   height  185cm

我需要为每个ID创建一个单独的行。就像这样:
   id  name   age  height
0  1   peter  23   185cm

非常感谢您的帮助,谢谢。


2
欢迎来到StackOverflow。请花些时间阅读这篇关于如何提供一个出色的pandas示例的帖子(https://dev59.com/O2Ij5IYBdhLWcg3wk182),以及如何提供一个最小化、完整和可验证的示例(http://stackoverflow.com/help/mcve),并相应地修改您的问题。这些关于如何提问的提示(http://stackoverflow.com/help/how-to-ask)也可能会有用。 - jezrael
1
请勿在提问中发布代码图片(或链接),详情请参考此处:http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question - jezrael
抱歉,我没有足够的声望来嵌入图片。 - pandalover
重复的功能无法正常工作。pivot_tables 无法处理重复的索引,而 unstack/groupby 也无法正常工作,因为你必须使用一个 agg_func,而我的值可以是字符串,因此你不能使用 "mean, sum" 等等。 - pandalover
2个回答

3
你可以使用 pivot_table 函数并采用聚合函数 join:
df = pd.DataFrame([[1, 'name', 'peter'], 
                   [1, 'age', 23], 
                   [1, 'height', '185cm'],
                   [1, 'age', 25]], columns=['id', 'column','value'])
print (df)
   id  column  value
0   1    name  peter
1   1     age     23
2   1  height  185cm
3   1     age     25

df1 = df.astype(str).pivot_table(index="id",columns="column",values="value",aggfunc=','.join)
print (df1)
    column    age height   name
id                         
1       23,25  185cm  peter

另一种使用 groupbyapply 进行联接,并使用 unstack 的解决方案:

df1 = df.astype(str).groupby(["id","column"])["value"].apply(','.join).unstack(fill_value=0)
print (df1)
column    age height   name
id                         
1       23,25  185cm  peter

0

假设您的数据框为"df",下面的代码行将会有所帮助:

df.pivot(index="subject",columns="predicate",values="object")


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接