我正在尝试创建与我的日期列中的每个日期相对应的新列。每列必须包含日期与所有其他日期之间的差异。

输入:

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'])

你可以在这里使用 numpysubtract.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/

10-10 00:56