我正在使用open\mfdataset
读取NetCDF文件,其中包含重复的时间。对于每一次重复,我只想保留第一次,而放弃第二次(它将永远不会出现得更频繁)。这个问题与这个熊猫问题非常相似,但这里提供的解决方案似乎都不适用于Xarray。
要重现问题,请执行以下操作:
import numpy as np
import netCDF4 as nc4
import xarray as xr
# Create example NetCDF files
for t in range(2):
nc = nc4.Dataset('test{}.nc'.format(t), 'w')
dim_t = nc.createDimension('time', None)
var_t = nc.createVariable('time', 'f8', ('time',))
var_s = nc.createVariable('var', 'f8', ('time',))
var_t.setncattr('units', 'hours since 2001-01-01 00:00:00')
var_t[:] = t*5+np.arange(6)
var_s[:] = t*5+np.arange(6)+t
nc.close()
# Read with xarray
f = xr.open_mfdataset(['test0.nc', 'test1.nc'])
生成的数据集中的时间为:
array(['2001-01-01T00:00:00.000000000', '2001-01-01T01:00:00.000000000',
'2001-01-01T02:00:00.000000000', '2001-01-01T03:00:00.000000000',
'2001-01-01T04:00:00.000000000', '2001-01-01T05:00:00.000000000',
'2001-01-01T05:00:00.000000000', '2001-01-01T06:00:00.000000000',
'2001-01-01T07:00:00.000000000', '2001-01-01T08:00:00.000000000',
'2001-01-01T09:00:00.000000000', '2001-01-01T10:00:00.000000000'], dtype='datetime64[ns]')
有没有一个简单的方法来删除
2001-01-01T05:00:00.000000000
的第二个出现?现实生活中的问题处理多维NetCDF文件,所以切换到熊猫是没有选择的。
[更新]我得到的最接近的答案是下面这个答案;这适用于我的简单例子,只要不使用Dask,如果文件包含Dask数组,我会得到错误:
与skipna=True的'最后'尚未在dask阵列上实现
但是我不知道我可以/必须在哪里设置
skipna
。
显然Stackoverflow不让我发表评论...我想补充圭佑的回答。您还可以使用get_index()
函数来获取熊猫索引。
f.sel(time=~f.get_index("time").duplicated())
我认为xray没有自己的方法来达到这个目的,但是下面的作品,
In [7]: _, index = np.unique(f['time'], return_index=True)
In [8]: index
Out[8]: array([ 0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11])
In [9]: f.isel(time=index)
Out[9]:
<xarray.Dataset>
Dimensions: (time: 11)
Coordinates:
* time (time) datetime64[ns] 2001-01-01 2001-01-01T01:00:00 ...
Data variables:
var (time) float64 dask.array<shape=(11,), chunksize=(6,)>
问题内容: 我有一个包含以下字段的表: 现在,我需要删除具有same的行。一种方法是使用以下SQL以及脚本( ): 运行此查询后,我可以使用服务器端脚本删除重复项。 但是,我想知道是否只能使用SQL查询来完成。 问题答案: 一种简单的方法是在3列上添加索引。在编写语句时,请包含关键字。像这样: 这将删除所有重复的行。作为一项额外的好处,重复的将来会出错。和往常一样,您可能需要在运行类似内容之前进行
问题内容: 我有这样的桌子 我想执行一个查询,以除去所有最新的重复项。我希望你有个主意吗? 例如,查询后的表必须是这样的 问题答案: 语法可能需要调整,但是应该做到这一点。此外,您可能希望将子查询预查询到其自己的表FIRST中,然后对该结果集运行DELETE FROM。
我想通过聚合pyspark数据帧来分组,同时基于此数据帧的另一列删除重复项(保留最后一个值)。 总之,我想将dropDuplicates应用于GroupeData对象。所以,对于每个组,我只能动态地保留一行。 对于下面的数据帧,直接的组聚合是: 导致以下数据帧: 我希望聚合只使用每个的最新状态。在这种情况下,已在更新为,因此当时,所有基本时间戳大于的聚合应仅对列功能使用此状态。预期的聚合数据帧是:
问题内容: 我有一个表,该表由id(key),符号,方向,范围,价格,百分比列组成。我想删除符号,方向,价格和百分比相同且范围最小的数据。我将如何完成? 我一直在尝试改变这种说法:使某些东西起作用。 问题答案: 这是 aw 表的样本数据。根据您的描述,我认为您想丢弃值分别为2、3和5的行。 确定的每个组合的最小范围值,,,和。 qryMinRanges : …给出以下结果集: 确定这些最小范围中的
请注意,在转向您之前,我已经浏览了各种帖子。事实上,我尝试实现中提供的解决方案:基于“notin”条件从数据帧中删除行 我的问题如下。让我们假设我有一个巨大的数据帧,我想删除重复的数据帧。我很清楚我可以使用drop_duplicates,因为这是最快的最简单的方法。然而,我们的老师希望我们创建一个包含重复项ID的列表,然后根据这些值是否包含在上述列表中删除它们。 现在,让我们看看输出: 因此,我得
问题内容: 我在存储的过程中有一个字符串,类似于或 从上面的字符串中,我必须从中删除多个逗号,它必须看起来像 或仅在 then时 。我必须仅使用Sql Server函数。我正在使用Sql Server 2008和.Net 3.5 提前致谢。 问题答案: 该选项适用于仅使用逗号或最多398个连续逗号的字符串。 如果需要更多,在顶部添加额外的2的幂,或者如果需要较少,则从顶部删除2的幂。每个阶段的注释