【问题标题】:Pandas Dataframe - How to stack two column values into one list?Pandas Dataframe - 如何将两列值堆叠到一个列表中?
【发布时间】:2018-06-19 08:36:37
【问题描述】:

我有一个包含三列(从、到、w)的数据框:

      from to w
0     0   1  0.670820
1     0   5  0.612372
2     0   2  0.612372
3     0   3  0.577350
4     0   4  0.408248

如何根据给定的 id 从两列(从、到)获取列表中的值?例如,在上面的示例中,对于给定的 id 0,列表将是 [1,5,2,3,4]。

请注意,id 可能出现在 from 或两列中。在示例中,如果给定的 id 为 1,则预期列表下方将为 [2,4,0,3,5]。

     from  to   w
0     1   2  0.730297
1     1   4  0.730297
2     0   1  0.670820
3     1   3  0.516398
4     1   5  0.365148

我迭代数据框中的行以生成列表:

myarr =[]
    for index, row in dftemp1.iterrows():
        from_id = row['from']
        to_id = row['to']
        if (from_id!=target_id):
            myarr.append(from_id)
        if (to_id!=target_id):
            myarr.append(to_id)

我想知道是否有更简单的方法来实现结果。任何帮助将不胜感激。

【问题讨论】:

    标签: python pandas stack melt


    【解决方案1】:

    使用你的第二个例子 -

    df
    
       from  to         w
    0     1   2  0.730297
    1     1   4  0.730297
    2     0   1  0.670820
    3     1   3  0.516398
    4     1   5  0.365148
    

    您可以argsort前两列中的值,具体取决于该值是否等于您的 ID。

    v = df.iloc[:, :-1].values
    
    i = np.arange(len(df))[:, None]
    j = np.argsort(v == 1, axis=1)   # replace `1` with your ID
    

    v[i, j][:, 0].tolist()
    [2, 4, 0, 3, 5]
    

    【讨论】:

      猜你喜欢
      • 2015-02-15
      • 2016-03-26
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 1970-01-01
      相关资源
      最近更新 更多