将dataframe列与2D list python进行比较

2024-10-03 06:23:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧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]]

对于上面的每个2D列表,它都绑定到Stretch中的每一行。我想删除所有与Strecth值不同的列表。最终,预期结果是:

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

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

说明: Stretch的第一行是SB。因此,相应的2D列表应该只包含SB的列表。等等 如果NanStretch中,只需按原样显示列表即可

我的想法是把Stretch转换成tuple,因为我认为这个职位很重要。没有成功。。我不知道如何绘制地图


Tags: 数据列表data职位nansbwbnb
1条回答
网友
1楼 · 发布于 2024-10-03 06:23:55

您可以尝试在列表理解中使用^{}

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

相关问题 更多 >