【问题标题】:How do I get the list in another format? [duplicate]如何以另一种格式获取列表? [复制]
【发布时间】:2021-03-23 14:10:20
【问题描述】:

我有一个数据框,我只想要包含某个值的值。我已经实现了。我现在想要的是按用户分组的列表。我得到的是列表中数据框的每个元素。如何获取此列表[[User1.item1, ..., user1, itemn], ..., [Usern.item1, ..., usern, itemn]]

d = {'userid': [0, 0, 0, 1, 2, 2, 3, 3, 4, 4, 4],
     'itemid': [715, 845, 98, 12324, 85, 715, 2112, 85, 2112, 852, 102]}
df = pd.DataFrame(data=d)
print(df)

users = df.loc[df.itemid == 715, "userid"]
df_new = df.loc[df.userid.isin(users)]

list_new = df_new[['itemid']].values.tolist()
# What I get
[[715],[845],[98],[85],[715]]
# What I want
[[715,845,98],[85,715]]

【问题讨论】:

    标签: python pandas list dataframe


    【解决方案1】:

    您可以使用groupby 操作

    list_new = df_new.groupby("userid")['itemid'].apply(list).tolist()
    print(list_new)  # [[715, 845, 98], [85, 715]]
    

    中间操作是

    list_new = df_new.groupby("userid")['itemid'].apply(list)
    print(list_new)  
    
    userid
    0    [715, 845, 98]
    2         [85, 715]
    Name: itemid, dtype: object
    

    【讨论】:

      【解决方案2】:

      如果您想在一行中完成所有代码,可以使用列表推导:

      [x for x in [*df.groupby('userid')['itemid'].apply(list)] if 715 in x]
      
      [[715, 845, 98], [85, 715]]
      

      代码:

      [*df.groupby('userid')['itemid'].apply(list)]

      等价于

      df_new.groupby("userid")['itemid'].apply(list).tolist()

      剩下的部分只是遍历从该主列表生成的内容 ^^^ 以查看715 是否在任何子列表中,其中x 是上述代码中的子列表。

      【讨论】:

        【解决方案3】:

        1.我们需要按用户 ID 对数据进行分组。分组在许多应用中非常重要,例如在机器学习预处理领域: 示例:假设我们的数据是从位于一个州各个部分的各个站点的传感器收集的。假设我们正在测量压力和温度。为便于理解,假设有三个站点 Station-1、Station-2 和 Station-3。在许多实际场景中,我们的数据中可能存在缺失值。如果我们使用整个数据来填充缺失值,我们可能不会得到好的结果。但是如果我们只使用它的站点数据来填充缺失值,我们可以得到很好的结果(因为不同站点的条件不同。但在特定站点它是相似的)。

        1. ans = df.groupby('userid')['itemid'].apply(list)
          
          userid
          0      [715, 845, 98]
          1             [12324]
          2           [85, 715]
          3          [2112, 85]
          4    [2112, 852, 102]
          Name: itemid, dtype: object
          

        每一行给出每个用户的所有itemid的

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-07
          • 2018-07-23
          • 1970-01-01
          • 2021-05-12
          • 2021-06-27
          • 2023-03-12
          • 2018-02-11
          相关资源
          最近更新 更多