我正在尝试创建与我的日期列中的每个日期相对应的新列。每列必须包含日期与所有其他日期之间的差异。
输入:
date
11-Sep-18
8-Jun-18
12-Sep-17
12-Jun-17
输出必须是:
date Diff_date1 Diff_date2 Diff_date3 Diff_date4
11-Sep-18 0 -95 -364 -456
8-Jun-18 95 0 -269 -361
12-Sep-17 364 269 0 -92
12-Jun-17 456 361 92 0
编辑 :子问题
我怎样才能用 groupby 做到这一点?每个组中有不同的行数。
ID date Diff_date1 Diff_date2 Diff_date3 Diff_date4
A 11-Sep-18 0 -95 -364 -456
A 8-Jun-18 95 0 -269 -361
A 12-Sep-17 364 269 0 -92
A 12-Jun-17 456 361 92 0
ID date Diff_date1 Diff_date2 Diff_date3 Diff_date4 Diff_date5
B 11-Jun-18 0 -123 -395 -456 -730
B 8-Feb-18 123 0 -272 -333 -607
B 12-May-17 395 272 0 -61 -335
B 12-Mar-17 456 333 274 0 -274
B 11-Jun-16 730 607 398 274 0
最佳答案
设置
df['date'] = pd.to_datetime(df['date'])
你可以在这里使用
numpy
和 subtract.outer
d = np.subtract.outer(df.date, df.date)
u = pd.DataFrame(d, index=df.date).rename(columns=lambda x: f'Diff_date{x+1}')
Diff_date1 Diff_date2 Diff_date3 Diff_date4
date
2018-09-11 0 days 95 days 364 days 456 days
2018-06-08 -95 days 0 days 269 days 361 days
2017-09-12 -364 days -269 days 0 days 92 days
2017-06-12 -456 days -361 days -92 days 0 days
如果你想要相反的关系(你可以根据你想要的输出),只需乘以
-1
关于python - Pandas:计算一行和所有其他行之间的差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55799834/