根据另一列计算同一列中最小值之间的日期差';使用Python创建条件
我想到的第一件事就是使用根据另一列计算同一列中最小值之间的日期差';使用Python创建条件,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我想到的第一件事就是使用 d = {'country': ['US', 'US', 'US','US', 'US', 'US', 'UK', 'UK','UK','UK','UK'], 'status': [0, 0, 0, 0, 1,1,0, 0, 0, 1,1], 'count':[0, 1, 10, 20,30,40,0,1,2,4,6], 'date':['2020-04-05', '2020-04-06', '2020-04-07', '2020-04
d = {'country': ['US', 'US', 'US','US', 'US', 'US', 'UK', 'UK','UK','UK','UK'],
'status': [0, 0, 0, 0, 1,1,0, 0, 0, 1,1],
'count':[0, 1, 10, 20,30,40,0,1,2,4,6],
'date':['2020-04-05', '2020-04-06', '2020-04-07', '2020-04-11', '2020-04-12',
'2020-04-13', '2020-04-02', '2020-04-03', '2020-04-05', '2020-04-06', '2020-04-07']}
df = pd.DataFrame(data=d)
但是,美国状态0的0天应该出现在2020-04-06,而不是2020-04-05,在2020-04-05中,计数为0(抱歉,我不知道如何正确地将输出放在这里)。因此,对于应用于返回日的组,应该有两个条件
groupby().transform()
提取最小日期:
df.groupby(['country', 'status'])['date'].apply(lambda x: x - x.min() if df['count']>0)
输出:
min_dates = (df.date.mask(df['count'].eq(0))
.groupby([df['country'],df['status']])
.transform('min')
)
df['date_diff'] = df['date'] - min_dates
您可以使用groupby().transform()
提取最小日期:
df.groupby(['country', 'status'])['date'].apply(lambda x: x - x.min() if df['count']>0)
输出:
min_dates = (df.date.mask(df['count'].eq(0))
.groupby([df['country'],df['status']])
.transform('min')
)
df['date_diff'] = df['date'] - min_dates
你能包括你得到的错误和你期望的结果吗?嗨,我编辑了这个问题。希望它有意义。你能包括你得到的错误和你期望的输出是什么吗?嗨,我编辑了这个问题。希望它会有意义。谢谢你,但是,问题仍然存在:第一天应该定义为计数>0。应该有另一个条件应用于此,如第一天(0天)谢谢你,但是,问题仍然存在:第一天应定义为计数>0。应在第一天(0天)应用另一个条件
country status count date date_diff
0 US 0 0 2020-04-05 -1 days
1 US 0 1 2020-04-06 0 days
2 US 0 10 2020-04-07 1 days
3 US 0 20 2020-04-11 5 days
4 US 1 30 2020-04-12 0 days
5 US 1 40 2020-04-13 1 days
6 UK 0 0 2020-04-02 -1 days
7 UK 0 1 2020-04-03 0 days
8 UK 0 2 2020-04-05 2 days
9 UK 1 4 2020-04-06 0 days
10 UK 1 6 2020-04-07 1 days