Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫查找id索引,其时间索引在特定月份开始_Python_Pandas_Dataframe_Multi Index - Fatal编程技术网

Python 熊猫查找id索引,其时间索引在特定月份开始

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

我有一些数据是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),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