【问题标题】:How to create a dataframe, which contain 2D list under a key?如何创建一个数据框,其中包含一个键下的二维列表?
【发布时间】:2020-12-28 16:40:06
【问题描述】:

我创建了一个字典,其中包含以下数据

x = {'a': [[1,2,3], [4,5,6]], 'b': [[7,8,9],[10,11,12]]}

我想创建一个看起来像这样的数据框,

我应该如何实现它?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    在列表理解中创建 DataFrames 并通过concat 加入:

    df = pd.concat({k: pd.DataFrame(v).T for k, v in x.items()}, axis=1)
    print(df)
       a     b    
       0  1  0   1
    0  1  4  7  10
    1  2  5  8  11
    2  3  6  9  12
    

    另一个想法是使用dict理解来改变原始格式(性能应该更好):

    d = {(k, i):y for k, v in x.items() for i, y in enumerate(v)}
    print (d)
    {('a', 0): [1, 2, 3], ('a', 1): [4, 5, 6], ('b', 0): [7, 8, 9], ('b', 1): [10, 11, 12]}
    
    df = pd.DataFrame(d)
    print (df)
       a     b    
       0  1  0   1
    0  1  4  7  10
    1  2  5  8  11
    2  3  6  9  12
    

    【讨论】:

    • 感谢您的回答,是否可以使用您提供的方法 1 将 a、b 以下的列名从 0,1 更改为 'index_0' 和 'index_1' 之类的名称。
    • @Shaji Thorn Blue 将pd.DataFrame(v).T 更改为pd.DataFrame(v).T. add_prefix('index')
    • 我问这个问题的主要动机是我现在应该如何更改作为单个键成员的行和列名,例如当前索引'a'有两列 0 和 1。是否可能要将其更改为完全不同的名称,假设第一列我们可以命名为“abc”,第二列我们可以命名为“xyz”,它当前为键“a”的 0 和 1。如果您能让我知道您提到的第一种方法是否可能发生这种变化,我将非常感激,即列表理解。谢谢你
    • @Shaji Thorn Blue 然后简单的就是使用像df = df.rename(columns={0:'abc', 1:'xyz'}, level=1)这样的重命名
    • @jezral 感谢所有帮助,这就是我到现在为止的工作方式,df = pd.DataFrame() for k, v in x.items(): df_zero = pd.concat({k: pd.DataFrame(v[0], columns=['abc'])}, axis=1) df_one = pd.concat({k: pd.DataFrame(v[1], columns=['xyz'])}, axis=1) frame = [df, df_zero, df_one] df = pd.concat(frame, axis=1) 但是,您的回答更简洁。
    猜你喜欢
    • 2021-09-23
    • 2012-07-21
    • 1970-01-01
    • 2022-09-23
    • 2021-01-26
    • 2022-11-18
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多