Python 熊猫查找id索引,其时间索引在特定月份开始
我有一些数据是CSV格式的Python 熊猫查找id索引,其时间索引在特定月份开始,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,我有一些数据是CSV格式的id、time、var。然后我继续创建了一个多索引数据框架,大致如下表所示 将numpy导入为np 作为pd进口熊猫 def时间(t): 将pd时间戳(“2019-01-01T12”)+pd返回到_timedelta(t,“d”) 数组=[ np.数组([1,1,2,2,3,3]), np.数组([时间(0)、时间(1)、时间(396)、时间(365)、时间(31)、时间(365)], ] df=pd.DataFrame(np.random.randn(6,1),ind
id、time、var
。然后我继续创建了一个多索引数据框架,大致如下表所示
将numpy导入为np
作为pd进口熊猫
def时间(t):
将pd时间戳(“2019-01-01T12”)+pd返回到_timedelta(t,“d”)
数组=[
np.数组([1,1,2,2,3,3]),
np.数组([时间(0)、时间(1)、时间(396)、时间(365)、时间(31)、时间(365)],
]
df=pd.DataFrame(np.random.randn(6,1),index=array,columns=[“var”])
df.index.names=[“id”,“time”]
df
有鉴于此,我想找到所有id,其中最早的条目是在1月份,然后绘制id表示的轨迹,仅用于1月份开始的轨迹
请注意,我认为时间实际上是排序的,而id不是。不确定这是否会改变什么
i、 e
df.pseudo\u过滤器(开始月份=“一月”)
您可以按min
time
df.groupby(level=0).filter(lambda x:x.index.get_level_values(1.min().month==1)
或
df.groupby(level=0).filter(lambda x:x.index.get_level_values(1.min().month_name()='一月')
输出:
var
身份证时间
1 2019-01-01 12:00:00 0.410113
2019-01-02 12:00:00 -0.572882
2 2020-02-01 12:00:00 -0.801334
2020-01-01 12:00:00 1.312035
将筛选器作为新函数添加到数据帧
@pd.api.extensions.register\u dataframe\u访问器(“伪”)
类伪:
定义初始(自我、目标):
self._obj=熊猫_obj
def过滤器(自身、开始月份):
返回(自对象分组)(级别=0)
.filter(lambda x:x.index.get_level_值(1).min()
.month_name()=开始月份)
然后你可以用
df.pseudo.filter(开始月份='一月')
输出:
var
身份证时间
1 2019-01-01 12:00:00 -1.314898
2019-01-02 12:00:00 0.810314
2 2020-02-01 12:00:00 -1.214327
2020-01-01 12:00:00 -0.678823
谢谢!第一部分已经是我想要的了。但第二部分也非常有趣,在接下来的几个月里,我可能会更经常地以某种形式需要它,因此一种新的方法可能会带来一些受欢迎的便利。:)
var
id time
1 2019-01-01 12:00:00 -0.505903
2019-01-02 12:00:00 0.626197
2 2020-02-01 12:00:00 0.461155
2020-01-01 12:00:00 0.569891
3 2019-02-01 12:00:00 -1.079466
2020-01-01 12:00:00 0.721466
var
id time
1 2019-01-01 12:00:00 -0.505903
2019-01-02 12:00:00 0.626197
2 2020-02-01 12:00:00 0.461155
2020-01-01 12:00:00 0.569891