大Pandas时间切片的一般方法从系列开始到d

2024-04-19 17:57:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一堆倾卸式雨量计数据,我需要校准,其中有多个不同时间段的校准系数。我一直在这样做:

data = pd.Series(range(100), pd.date_range('1950-01-01', freq='d', periods=100))

data.ix[:'2000-01-01'] *= CF1
data.ix['2000-01-02':'2000-05-12'] *= CF2
.
.
.
data.ix['2015-02-23':] *= CFn

我工作的每个电台。我想用这样的字典来应用这些:

calibrations = {"Station1": [(slice(None), '2000-01-01', CF1),
                             ('2000-01-02', '2000-05-12', CF2),
                             ...]}

for station in calibrations:
    for start,end,cf in calibrations[station]:
        data.ix[start:end, station] *= cf

将校准信息保存在可以导入的dict或csv文件中,这将更加简洁和易于维护。你知道吗

如何以一种通用的方式对带有DatetimeIndex的序列进行切片,这种方法可以解释开始和结束时间段,而不必对数据的开始和结束执行data.ix[:timestamp]data.ix[timestamp:]?你知道吗

我尝试了data.ix[slice(None):timestamp]作为记录的开头,但是需要一个时间戳或可转换的字符串。你知道吗

希望这是有意义的任何帮助将被感激。你知道吗


Tags: 数据nonefordataslicerangetimestamppd
2条回答

为了将来的参考,我用None替换了slice(None)来解决我的问题 它允许我使用相同的.ix[start:end]语法来表示序列的开始或结束,使用None而不是表示最后一个时间戳的字符串。你知道吗

你可以试试看lambda函数。。。或从索引中创建列(从另一篇文章中获取):

Series(s.reset_index().apply(f, axis=1).values, index=s.index)

或者“where”函数。 我需要为你进一步调查这个问题(一个有趣的问题)。你知道吗

相关问题 更多 >