我有一个数据框数据:
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
评论前必须登录!
注册