个性化阅读
专注于IT技术分析

Python如何比较数据框列和2D列表?

点击下载

我有一个数据框数据:

Stretch
SB
NB
...
WB

那里的行有Nan。我有二维列表:

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

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

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

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

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

说明:Stretch的第一行是SB。因此, 相应的2D列表仅应在其中列出SB。依此类推…如果在拉伸中使用Nan, 则只需按原样显示列表即可。

我的想法是将Stretch转换为元组, 因为我认为该职位很重要。它没有解决..我不知道如何映射它们。


#1


你可以尝试在列表理解中使用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)]

或通常使用以下循环:

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
赞(0)
未经允许不得转载:srcmini » Python如何比较数据框列和2D列表?

评论 抢沙发

评论前必须登录!