gpt4 book ai didi

python - Pandas DataFrame 格式化以获得预期输出

转载 作者:行者123 更新时间:2023-12-01 05:20:58 24 4
gpt4 key购买 nike

在下面的 Pandas DataFrame 中,

df = pd.DataFrame({'session' : ["1","1","2","2","3","3"],
'path' : ["p1","p2","p1","p2","p2","p3"], 'seconds' : ["20","21","132","10","24","45"]})

我需要得到如下所示的输出。 (页面作为列, session 作为行,每个单元格中以秒为单位。)

session,p1,p2,p3
1,20,21,0
2,132,10,0
3,0,24,45

到目前为止我做了什么。

In [76]: wordlist = ['p1', 'p2', 'p3']
In [77]: df2 = pd.DataFrame(df.groupby('session').apply(lambda x: ','.join(x.path)))
In [78]: df2 #I have renamed the columns
Out[78]:

path
session
1 p1,p2
2 p1,p2
3 p2,p3

In [79]: df3 = pd.DataFrame(df.groupby('session').apply(lambda x: ','.join(x.seconds.astype(str))))
In [80]: df3 #I have renamed the columns
Out[80]:
path
session
1 20,21
2 132,10
3 24,45

以下仅给出 bool 结果。我需要得到我的预期输出。有什么帮助吗?

In [84]: pd.DataFrame({name : df2["path"].str.contains(name) for name in wordlist})
Out[84]:
p1 p2 p3
session
1 True True False
2 True True False
3 False True True

最佳答案

使用数据透视表:

df.pivot(index='session', columns='path')

然后将所有 Nan 替换为零:

df2 = df1.fillna(0)

这将为您提供以下输出:

        seconds        
path p1 p2 p3
session
1 20 21 0
2 132 10 0
3 0 24 45

然后您可能想要删除多索引列:

df1.columns = df1.columns.droplevel(0)

产生您想要的解决方案(无逗号):

path      p1  p2  p3
session
1 20 21 0
2 132 10 0
3 0 24 45

最后你可以使用StringIO将其转换为逗号分隔的字符串:

import StringIO
s = StringIO.StringIO()
df1.to_csv(s)
print s.getvalue()

输出如下:

session,p1,p2,p3
1,20,21,0
2,132,10,0
3,0,24,45

关于python - Pandas DataFrame 格式化以获得预期输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22398841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com