Python 是否有一种方法可以将两个列表与来自xarray数据变量的相应信息连接起来?
我有两个列表,列表1和列表2Python 是否有一种方法可以将两个列表与来自xarray数据变量的相应信息连接起来?,python,pandas,numpy,python-xarray,Python,Pandas,Numpy,Python Xarray,我有两个列表,列表1和列表2 list1 = [wind_speed_0, wind_speed_1, wind_direction_0, wind_direction_1] list2 = [serial_num_0, serial_num_1] 这些列表中的项目实际上是属于xarray数据集的数据变量的名称 本质上,如果列表2中的最后一个字符与列表1中的最后一个字符匹配,那么我希望获取列表2中每个项目的对应序列号,并将其附加到列表1中的项目上 例如:“abc123”是
list1 = [wind_speed_0, wind_speed_1, wind_direction_0,
wind_direction_1]
list2 = [serial_num_0, serial_num_1]
这些列表中的项目实际上是属于xarray数据集的数据变量的名称
本质上,如果列表2中的最后一个字符与列表1中的最后一个字符匹配,那么我希望获取列表2中每个项目的对应序列号,并将其附加到列表1中的项目上
例如:“abc123”是分配给serial_num_0的序列号,“abc456”是分配给serial_num_1的序列号。因此,我想以如下所示的列表3结束:
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