【问题标题】:compare a dataframe column with 2D list python将数据框列与二维列表 python 进行比较
【发布时间】:2020-08-14 12:24:25
【问题描述】:

我有一个数据框data

Stretch
SB
NB
...
WB

行将有Nan。我有 2D 列表:

[['SB', someFloatvalue, someFloatvalue], ['SB', someFloatvalue, someFloatvalue], ['NB', someFloatvalue, someFloatvalue]]

[['NB', someFloatvalue, someFloatvalue], ['SB', someFloatvalue, someFloatvalue], ['NB', someFloatvalue, someFloatvalue]]

上面的每个二维列表都与Stretch 中的每一行相关联。我想删除所有与Strecth 值不同的列表。最后,预期的结果是:

[['SB', someFloatvalue, someFloatvalue], ['SB', someFloatvalue, someFloatvalue]]

[['NB', someFloatvalue, someFloatvalue], ['NB', someFloatvalue, someFloatvalue]]

说明: Stretch 的第一行是 SB。因此,相应的 2D 列表应该只列出 SB。等等... 在Stretch 中的Nan 的情况下,只需按原样显示列表即可。

我的想法是将Stretch 转换为tuple,因为我认为这个位置很重要。它没有成功..我不知道如何映射它们..

【问题讨论】:

    标签: python pandas list dataframe tuples


    【解决方案1】:

    您可以尝试在list-comprehension中使用zip()

    out = [[l for l in sub_data if l[0] == key or str(key) == "nan" ] for sub_data, key in zip(data, df.Stretch)]
    

    或者在通常的for循环中:

    out_1 = []
    for sub_data, key in zip(data, df.Stretch):
        sub = []
        for l in sub_data:
            if l[0] == key or str(key) == "nan":
                sub.append(l)
        if len(sub) > 0: out_1.append(sub)
    

    完整代码

    df = pd.DataFrame({"Stretch": ["SB", "NB", np.NaN]})
    
    data = [[['SB', 123456, 123456], ['SB', 123456, 123456], ['NB', 123456, 123456]],
            [['NB', 123456, 123456], ['SB', 123456, 123456], ['NB', 123456, 123456]],
            [['NB', 123456, 123456], ['SB', 123456, 123456], ['NB', 123456, 123456]]]
    
    # Usual for loop
    out_1 = [[l for l in sub_data if l[0] == key or str(key) == "nan"] for sub_data, key in zip(data, df.Stretch)]
    print(out_1)
    # [[['SB', 123456, 123456], ['SB', 123456, 123456]],
    #  [['NB', 123456, 123456], ['NB', 123456, 123456]],
    #  [['NB', 123456, 123456], ['SB', 123456, 123456], ['NB', 123456, 123456]]]
    
    
    out_2 = []
    for sub_data, key in zip(data, df.Stretch):
        sub = []
        for l in sub_data:
            if l[0] == key or str(key) == "nan":
                sub.append(l)
        if len(sub) > 0: out_2.append(sub)
    
    print(out_2)
    # [[['SB', 123456, 123456], ['SB', 123456, 123456]],
    #  [['NB', 123456, 123456], ['NB', 123456, 123456]],
    #  [['NB', 123456, 123456], ['SB', 123456, 123456], ['NB', 123456, 123456]]]
    
    print(out_1 == out_2)
    # True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      相关资源
      最近更新 更多