【问题标题】:Create a Nested list from a pandas data frame从熊猫数据框创建一个嵌套列表
【发布时间】:2021-12-29 20:28:04
【问题描述】:

我正在尝试从 pandas 数据框创建一种嵌套列表。

我有这个数据框:

     id1       Name1     ids1                        Name2      ids2                     ID     col1  Goal     col2    col3       
0   ab-85643      aasd1   234,34,11223,345,345_2        vaasd1    2234,354,223,35,3435     G-0001     1   NaN       3       1      
1   ab-85644      aasd2   2343,355,121,34                                                  G-0002     2   56.0000   4       22     
2   ab-8564312    aabsd1  24 , 23 ,244 ,2421 ,567 ,789                                     G-00023    3   NaN       32      33     
3   ab-8564314    aabsd2  87 ,35 ,67_1                  averabsd   387 ,355 ,667_1         G-01034    4   89.0000   43      44 

#Here is the above data frame and you can convert it again to pandas using the below command
df.to_dict()

dic = {'id1  ': {0: ab-85643, 1: ab-85644, 2: ab-8564312, 3: ab-8564314},
'Name1': {0: 'aasd1 ', 1: 'aasd2 ', 2: 'aabsd1', 3: 'aabsd2'},
 'ids1 ': {0: '234,34,11223,345,345_2      ',
  1: '2343,355,121,34             ',
  2: '24 , 23 ,244 ,2421 ,567 ,789',
  3: '87 ,35 ,67_1                '},
 'Name2': {0: 'vaasd1  ', 1: '        ', 2: '        ', 3: 'averabsd'},
 'ids2': {0: '2234,354,223,35,3435',
  1: '                    ',
  2: '                    ',
  3: ' 387 ,355 ,667_1  '},
 'ID': {0: 'G-0001 ', 1: 'G-0002 ', 2: 'G-00023', 3: 'G-01034'},
 'col1': {0: 1, 1: 2, 2: 3, 3: 4},
 'Goal    ': {0: ' NaN    ', 1: 56, 2: ' NaN    ', 3: 89},
 'col2': {0: 3, 1: 4, 2: 32, 3: 43},
 'col3': {0: 1, 1: 22, 2: 33, 3: 44}}

pd.DataFrame.from_dict(dic)

所以我想使用上述数据框使用“id1”列以及“Name1”和“Name2”列创建一种嵌套列表。 例如,如果我们考虑第一行,id1 应该在一个列表中 (['ab-85643']) 并且 'Name1' 和 'Name2' 应该是另一个列表 ([ 'aasd1','vaasd1'])。然后对于第一行,id1 列表和 'Name1' 和 'Name2' 列表应该在同一个列表中 ([['aasd1','vaasd1'],['ab-85643']])。有些行没有“Name”或“Name2”。应该对所有行都执行此操作,最终列表应如下所示。

collection = [[ ['aasd1','vaasd1'],['ab-85643'] ],[ ['aasd2'],['ab-85644'] ],[ ['aabsd1'],['ab-8564312'] ],[ ['aabsd2','averabsd'],['ab-8564314'] ]]

是否可以使用 python 创建?

有人可以给我一个想法吗?

任何事情都值得赞赏。提前致谢!

【问题讨论】:

    标签: python pandas list dataframe


    【解决方案1】:

    如果您将自定义函数应用于相关列会更容易:

    def get_collections(row):
        first = row[:2].str.strip()
        return [first[first!=''].tolist(), [row[2]]]
    
    out = df[['Name1','Name2','id1']].apply(get_collections, axis=1).tolist()
    

    输出:

    [[['aasd1', 'vaasd1'], ['ab-85643']],
     [['aasd2'], ['ab-85644']],
     [['aabsd1'], ['ab-8564312']],
     [['aabsd2', 'averabsd'], ['ab-8564314']]]
    

    【讨论】:

    • 感谢您的快速回复!你能解释一下 first = row[:2] 发生了什么并返回 [first[first!=''].tolist(), [row[2]]] 吗?并没有真正意识到发生了什么。不过效果很好!
    猜你喜欢
    • 2021-04-06
    • 2019-01-11
    • 2015-03-28
    • 2018-03-07
    • 2020-04-19
    • 2020-09-21
    • 1970-01-01
    • 2023-01-14
    相关资源
    最近更新 更多