我有两个列表,list1 和 list2。
list1 = [wind_speed_0, wind_speed_1, wind_direction_0,
wind_direction_1]
list2 = [serial_num_0, serial_num_1]
这些列表中的项目实际上是属于 xarray 数据集的数据变量的名称。
本质上,如果 list2 中的最后一个字符与 list1 中的最后一个字符匹配,那么我想为 list2 中的每个项目获取相应的序列号,并将其附加到 list1 中的项目上。
例如:“abc123”是分配给serial_num_0的序列号,“abc456”是分配给serial_num_1的序列号。所以,我希望最终得到一个如下所示的 list3:
list3 = [wind_speed_abc123, wind_speed_abc456,
wind_direction_abc123,wind_direction_abc456]
有没有一种简单的方法可以做到这一点,但我却忘记了?
这是我到目前为止所拥有的:
# Collect all possible items for lists from xarray dataset object
want_variables = ['wind_speed_.*','wind_direction_.*']
serial_nums = ['serial_num_.*']
# Give me all of the data variables found in my xarray dataset
obj_variables = list(ds.data_vars)
# Use for loops to create list1 and list2
for var in want_variables:
r = re.compile(var)
list1 = list(filter(r.match, obj_variables))
for ii in serial_nums:
rr = re.compile(ii)
list2 = list(filter(rr.match, obj_variables))
这让我得到了 list1 和 list2,但我不确定从这里去哪里。
最佳答案
我建议使用匹配序列作为引用字典的索引,该字典将每个值存储在键(列)下:
import pandas as pd
import re
# build the regular expression
pattern = re.compile('_([0-9]+)')
# build a lambda to use in for loop
f = lambda x: int(pattern.findall(x)[0])
ref_dict = {}
# assign all data to idx & cols:
for x in list1 + list2:
idx = f(x)
col = x.split('_'+str(idx))[0]
if idx not in ref_dict.keys():
ref_dict[idx] = {col:x}
else:
ref_dict[idx][col] = x
df = pd.DataFrame(ref_dict).T
print(df)
# serial_num wind_direction wind_speed
# 0 serial_num_0 wind_direction_0 wind_speed_0
# 1 serial_num_1 wind_direction_1 wind_speed_1
关于python - 有没有办法将两个列表与 xarray 数据变量中的相应信息连接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58125364/