繁体   English   中英

通过堆叠列重塑熊猫DataFrame

[英]Reshape a pandas DataFrame by stacking columns

如何使用熊猫制作类似的东西?

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

我已经试过了这段代码,但是由于列表的长度不同,所以失败了。 我可以通过制作大量DataFrame并附加它们来做到这一点,但这非常慢。

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()

orient='index' from_dict更能容忍不同长度的数据:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM