Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.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 熊猫:计算一行和所有其他行之间的差异_Python_Python 3.x_Pandas - Fatal编程技术网

Python 熊猫:计算一行和所有其他行之间的差异

Python 熊猫:计算一行和所有其他行之间的差异,python,python-3.x,pandas,Python,Python 3.x,Pandas,我正在尝试创建与日期列中的每个日期对应的新列。每列必须包含日期与所有其他日期之间的差异 输入: 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

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

输入:

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
设置


您可以使用
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}')


如果您想要相反的关系(可能基于所需的输出),只需使用
numpy
广播

s=pd.to_datetime(df.date)

df=pd.concat([df,pd.DataFrame((s.values[:,None]-s.values)/np.timedelta64(1, 'D'),index=df.index)],axis=1)
df
Out[193]: 
        date      0      1      2      3
0  11-Sep-18    0.0   95.0  364.0  456.0
1   8-Jun-18  -95.0    0.0  269.0  361.0
2  12-Sep-17 -364.0 -269.0    0.0   92.0
3  12-Jun-17 -456.0 -361.0  -92.0    0.0

另一种使用numpy的方式

df['date'] = pd.to_datetime(df['date'])
columns = ['Diff_date_' + str(i) for i in np.arange(len(df['date']))]
pd.DataFrame(df['date'].values - df['date'].values[:,np.newaxis], index = df['date'], columns = columns)


            Diff_date_0 Diff_date_1 Diff_date_2 Diff_date_3
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

只是增加了一个小问题。你能看一看吗?只是增加了一个子问题。你能看一看吗?@user0205到时候和小组一起做,因为刚才添加了一个子问题。你能看一下吗?
s=pd.to_datetime(df.date)

df=pd.concat([df,pd.DataFrame((s.values[:,None]-s.values)/np.timedelta64(1, 'D'),index=df.index)],axis=1)
df
Out[193]: 
        date      0      1      2      3
0  11-Sep-18    0.0   95.0  364.0  456.0
1   8-Jun-18  -95.0    0.0  269.0  361.0
2  12-Sep-17 -364.0 -269.0    0.0   92.0
3  12-Jun-17 -456.0 -361.0  -92.0    0.0
df['date'] = pd.to_datetime(df['date'])
columns = ['Diff_date_' + str(i) for i in np.arange(len(df['date']))]
pd.DataFrame(df['date'].values - df['date'].values[:,np.newaxis], index = df['date'], columns = columns)


            Diff_date_0 Diff_date_1 Diff_date_2 Diff_date_3
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