Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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 熊猫分组标记日期少于n个月_Python_Pandas - Fatal编程技术网

Python 熊猫分组标记日期少于n个月

Python 熊猫分组标记日期少于n个月,python,pandas,Python,Pandas,在这个例子中,col1有两个不同的类别。如果我们说n个月=12,那么我们如何计算那些满足的类别,这样一个新的列将标记类别a为真,而类别B为假,因为它大于n=12个月 d_ex = pd.DataFrame({'col1': ['A', 'A', 'B', 'B', 'A'], 'col2': ['2019-01-01', '2018-02-01', '2015-01-01', '2019-01-0

在这个例子中,col1有两个不同的类别。如果我们说n个月=12,那么我们如何计算那些满足的类别,这样一个新的列将标记类别a为真,而类别B为假,因为它大于n=12个月

d_ex = pd.DataFrame({'col1': ['A', 'A', 'B', 'B', 'A'],
                     'col2': ['2019-01-01', '2018-02-01',
                             '2015-01-01', '2019-01-01', '2019-05-01']})

d_ex['col2'] = pd.to_datetime(d_ex['col2'])
我试过了

d_ex.groupby(['col1'])['col2'].diff()
但这是行不通的。此外,该类别可能会出现两次以上的事件,因此,如果第三次出现日期为2015年的a类事件,我希望将其标记为False,但其他两次仍然为true

我发现了这一点,但我不确定如何将代码更改为不使用idxmax

尝试给出的解决方案

(d_ex.groupby('col1')['col2'].diff().apply(lambda x: my_abs(x))
.apply(lambda x: set_condition(x)).bfill())
返回

0     True
1     True
2    False
3    False
4    False
但是索引4应该为真

创建数据帧:
将熊猫作为pd导入
d_ex=pd.DataFrame({'col1':['A','A','B','B','A'],
“col2”:[“2019-01-01”、“2018-02-01”,
'2015-01-01', '2019-01-01', '2019-05-01']})
d_ex['col2']=pd.to_datetime(d_ex['col2'])
#对列进行排序
d_ex.sort_值(['col1','col2'],inplace=True)
col1 col2
A 2018-02-01
A 2019-01-01
A 2019-05-01
B 2015-01-01
B 2019-01-01
分组差异:
  • diff
    为每个组返回一个
    timedelta
    对象
    • NaT
      始终适用于组内的第一次出现
d_ex['diff']=d_ex.groupby('col1').diff()
col1 col2 diff
A 2018-02-01 NaT
A 2019-01-01 334天
A 2019-05-01 120天
B 2015-01-01 NaT
B 2019-01-01 1461天
返回差分abs的函数
  • abs
    NaT
    上不起作用,因此不能只应用
    abs
  • 如果在
    col1
    col2
    上使用
    sort\u值
    ,则可以跳过此步骤
def my_abs(x):
尝试:
x=绝对值(x)
除类型错误外:
x=x
返回x
#应用函数
d_ex['diff']=d_ex['diff'].应用(lambda x:my_abs(x))
col1 col2 diff
A 2018-02-01 NaT
A 2019-01-01 334天
A 2019-05-01 120天
B 2015-01-01 NaT
B 2019-01-01 1461天
用于设置条件的函数,如果NaT为None
  • 由于使用了
    groupby
    diff
    ,任何组的第一行都应该是NaT
  • NaT
    设置为无,然后可以
    反写它
def set_条件(x):
如果类型(x)==pd._libs.tslibs.nattype.nattype:
x=无
elif x创建数据帧:
将熊猫作为pd导入
d_ex=pd.DataFrame({'col1':['A','A','B','B','A'],
“col2”:[“2019-01-01”、“2018-02-01”,
'2015-01-01', '2019-01-01', '2019-05-01']})
d_ex['col2']=pd.to_datetime(d_ex['col2'])
#对列进行排序
d_ex.sort_值(['col1','col2'],inplace=True)
col1 col2
A 2018-02-01
A 2019-01-01
A 2019-05-01
B 2015-01-01
B 2019-01-01
分组差异:
  • diff
    为每个组返回一个
    timedelta
    对象
    • NaT
      始终适用于组内的第一次出现
d_ex['diff']=d_ex.groupby('col1').diff()
col1 col2 diff
A 2018-02-01 NaT
A 2019-01-01 334天
A 2019-05-01 120天
B 2015-01-01 NaT
B 2019-01-01 1461天
返回差分abs的函数
  • abs
    NaT
    上不起作用,因此不能只应用
    abs
  • 如果在
    col1
    col2
    上使用
    sort\u值
    ,则可以跳过此步骤
def my_abs(x):
尝试:
x=绝对值(x)
除类型错误外:
x=x
返回x
#应用函数
d_ex['diff']=d_ex['diff'].应用(lambda x:my_abs(x))
col1 col2 diff
A 2018-02-01 NaT
A 2019-01-01 334天
A 2019-05-01 120天
B 2015-01-01 NaT
B 2019-01-01 1461天
用于设置条件的函数,如果NaT为None
  • 由于使用了
    groupby
    diff
    ,任何组的第一行都应该是NaT
  • NaT
    设置为无,然后可以
    反写它
def set_条件(x):
如果类型(x)==pd._libs.tslibs.nattype.nattype:
x=无

elif x@bbd108答案已更新为排序
col1
col2
。这也消除了使用
my_abs
@bbd108的需要。答案已更新为排序
col1
col2
。这也消除了使用
my_abs
的需要。