python - 有没有办法将两个列表与 xarray 数据变量中的相应信息连接起来?

标签 python pandas numpy python-xarray

我有两个列表,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/

相关文章:

python - Numpy 创建一个空的 alpha 图像

python - 如何在 python 中将元组转换为整数

python - 如何在 turtle 圆圈和矩形内生成随机点?

python - Pandas:如何通过保留第一个数据帧的信息来合并列上的两个数据帧?

python - 展平 Pandas 数据框

python - 按行总和和值过滤

python - 返回具有跨列唯一对的行

python - Numpy:如何确定 numpy 数组的所有元素是否都等于一个数字

python - LeetCode 最长回文子序列问题 "Time Limit Exceeded"

python - 最快的计数向量器实现