如何计算具有相同标签 python 的词典中日期之间的最小天数差异
How can I calculate the smallest difference in days between date in dictionaries that have the same label python
我有这样的词典:
tr1 = {'label': 'name1', 'date': '2021-09-29'}
tr2 = {'label': 'name1', 'date': '2021-08-30'}
tr3 = {'label': 'name1', 'date': '2021-09-30'}
tr4 = {'label': 'name2', 'date': '2021-06-30'}
tr5 = {'label': 'name2', 'date': '2021-05-30'}
tr6 = {'label': 'name3', 'date': '2021-06-30'}
我想要这样的列表:
[1, 1, 1, 30, 0]
此列表是具有相同标签的字典的日期之间的最小间隔(以天为单位),如果我们没有其他具有相同标签的字典,则为 0。
我尝试使用 dataframe、groupby 和 .transfrom,但这不起作用:
df_day = pd.DataFrame(sample_transaction)
df_day.date = df_day.date.apply(lambda x :
int(datetime.datetime.timestamp(
datetime.datetime.strptime(x, "%Y-%m-%d"))))
group_day = df_day[['label', 'date']].groupby(['label'])
group_day.transform(
lambda x: min([abs(a - b) if a != b else 0.0 for a in x for b in x]))
sample_transaction
只是里面有字典的列表,
我试图用时间戳转换秒中的日期和
我尝试使用 transform 和 lambda 进行计算,但我只得到 0.0
的列表
IIUC,您可以对每个组的日期进行排序并获得最小 diff
:
l = [tr1, tr2, tr3, tr4, tr5, tr6]
(pd.DataFrame(l)
.assign(date=lambda d: pd.to_datetime(d['date']))
.groupby('label')['date']
.transform(lambda s: s.sort_values().diff().min())
)
输出:
0 1 days 00:00:00
1 1 days 00:00:00
2 1 days 00:00:00
3 31 days 00:00:00
4 31 days 00:00:00
5 NaT
Name: date, dtype: object
对于提供的确切格式:
(pd.DataFrame(l)
.assign(date=lambda d: pd.to_datetime(d['date']))
.groupby('label')['date']
.transform(lambda s: s.sort_values().diff().min().days)
.fillna(0, downcast='infer')
.to_list()
)
输出:
[1, 1, 1, 31, 31, 0]
我有这样的词典:
tr1 = {'label': 'name1', 'date': '2021-09-29'}
tr2 = {'label': 'name1', 'date': '2021-08-30'}
tr3 = {'label': 'name1', 'date': '2021-09-30'}
tr4 = {'label': 'name2', 'date': '2021-06-30'}
tr5 = {'label': 'name2', 'date': '2021-05-30'}
tr6 = {'label': 'name3', 'date': '2021-06-30'}
我想要这样的列表:
[1, 1, 1, 30, 0]
此列表是具有相同标签的字典的日期之间的最小间隔(以天为单位),如果我们没有其他具有相同标签的字典,则为 0。 我尝试使用 dataframe、groupby 和 .transfrom,但这不起作用:
df_day = pd.DataFrame(sample_transaction)
df_day.date = df_day.date.apply(lambda x :
int(datetime.datetime.timestamp(
datetime.datetime.strptime(x, "%Y-%m-%d"))))
group_day = df_day[['label', 'date']].groupby(['label'])
group_day.transform(
lambda x: min([abs(a - b) if a != b else 0.0 for a in x for b in x]))
sample_transaction
只是里面有字典的列表,
我试图用时间戳转换秒中的日期和
我尝试使用 transform 和 lambda 进行计算,但我只得到 0.0
IIUC,您可以对每个组的日期进行排序并获得最小 diff
:
l = [tr1, tr2, tr3, tr4, tr5, tr6]
(pd.DataFrame(l)
.assign(date=lambda d: pd.to_datetime(d['date']))
.groupby('label')['date']
.transform(lambda s: s.sort_values().diff().min())
)
输出:
0 1 days 00:00:00
1 1 days 00:00:00
2 1 days 00:00:00
3 31 days 00:00:00
4 31 days 00:00:00
5 NaT
Name: date, dtype: object
对于提供的确切格式:
(pd.DataFrame(l)
.assign(date=lambda d: pd.to_datetime(d['date']))
.groupby('label')['date']
.transform(lambda s: s.sort_values().diff().min().days)
.fillna(0, downcast='infer')
.to_list()
)
输出:
[1, 1, 1, 31, 31, 0]