【问题标题】:List of lists to a Pandas dataframePandas 数据框的列表列表
【发布时间】:2018-02-05 17:44:09
【问题描述】:

您好,我正在尝试创建一个查找列表,给定一个 listID,我可以找到拥有它的用户,给定一个 UserID,我可以找到该用户的所有列表。

数据采用以下格式:

[['34', '345'],
['12', '23,534,34'],
['1', '13,42']]

我想要一个看起来像这样的熊猫数据框:

UserID, ListID
34, 345
12, 23
12, 534
12, 34
 1, 13
 1, 42

我的想法是让第二个字符串在“逗号”上拆分为列表,但从那里我被卡住了。有什么建议吗?

【问题讨论】:

    标签: python python-3.x list pandas


    【解决方案1】:

    您应该在将数据输入数据框构造函数之前清理数据。这是一个简单的脚本:

    import pandas as pd
    
    data = [['34', '345'],
    ['12', '23,534,34'],
    ['1', '13,42']]
    
    new_data = []
    for row in data:
        x, yvals = row
        for y in yvals.split(','):
            new_data.append([x,y])
    
    df = pd.DataFrame(new_data, columns=['UserID', 'ListID'])
    

    【讨论】:

    • 好多了 ;) +1
    【解决方案2】:

    这是一种方法

    In [386]: L = [['34', '345'], ['12', '23,534,34'], ['1', '13,42']]
    
    In [387]: (pd.DataFrame(L, columns=['UserID', 'ListID'])
                 .set_index('UserID')
                 .ListID.str.split(',')
                 .apply(pd.Series)
                 .stack()
                 .reset_index(level=0, name='ListID'))
    Out[387]:
      UserID ListID
    0     34    345
    1     12     23
    2     12    534
    3     12     34
    4      1     13
    5      1     42
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      df_tmp = pd.DataFrame([['34', '345'],
      ['12', '23,534,34'],
      ['1', '13,42']], columns=['ListID', 'UserIDs'])
      
      s = df_tmp['UserIDs'].str.split(',', expand=True).stack()
      i = s.index.get_level_values(0)
      df = df_tmp.loc[i].copy()
      df["UserID"] = s.values
      del df['UserIDs']
      

      【讨论】:

        猜你喜欢
        • 2015-12-14
        • 2020-11-22
        • 2021-03-22
        • 1970-01-01
        • 1970-01-01
        • 2023-01-17
        • 2017-12-03
        • 2017-04-30
        • 2021-08-21
        相关资源
        最近更新 更多