【问题标题】:Reshape a pandas DataFrame by stacking columns通过堆叠列重塑熊猫数据框
【发布时间】:2017-06-29 21:23:17
【问题描述】:

如何使用 pandas 制作这样的东西?

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

【问题讨论】:

    标签: python pandas reshape


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多