通过堆叠列重塑数据帧

2024-06-01 10:08:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我怎么用熊猫做这样的东西?你知道吗

in:
data = {post1: [like1, like2], 
        post2: [like1, like2, like3, like4], 
        post3: [like1, like2, like3]
        }

out:
post1 like1
post1 like2
post2 like1
post2 like2
post2 like3
post2 like4
post3 like1
post3 like2
post3 like3

我试过这个代码,但是失败了,因为列表的长度不同。我可以通过制作大量的数据帧并附加它们来实现,但是速度非常慢。你知道吗

def run():
    result = {}

    for link in links:
        result[link] = id2screen(get_likes(link))

    df = DataFrame.from_dict(result)
    stacked = df.set_index(keys).stack()

    stacked.to_excel(r'C:\Users\user\Desktop\out.xlsx',  
                     index=False)

run()

Tags: runindfindexpost2linkresultout
1条回答
网友
1楼 · 发布于 2024-06-01 10:08:11

from_dictorient='index'对不同长度的数据更为宽容:

pd.DataFrame.from_dict(data, orient='index')
Out[32]: 
           0      1      2      3
post1  like1  like2   None   None
post3  like1  like2  like3   None
post2  like1  like2  like3  like4

但是

pd.DataFrame.from_dict(data, orient='index').stack()

提供:

Out[40]: 
post1  0    like1
       1    like2
post3  0    like1
       1    like2
       2    like3
post2  0    like1
       1    like2
       2    like3
       3    like4
dtype: object

因此,要获得图像化的目标输出,可以添加.reset_index(level=1, drop=True)

pd.DataFrame.from_dict(data, orient='index').stack().reset_index(level=1, 
                                                                 drop=True)
Out[34]: 
post1    like1
post1    like2
post3    like1
post3    like2
post3    like3
post2    like1
post2    like2
post2    like3
post2    like4
dtype: object

相关问题 更多 >