python - 从所有其他行中减去每一行并在 python 中查看为矩阵

标签 python pandas dataframe

我有这样的 df:

id   date
1    01-02-2013
2    01-06-2013
3    05-31-2013
4    07-06-2013

我想建立一个矩阵来显示每个 id,特定 id 与所有其他 id 之间耗时(以天为单位)。即像这样的东西:

   1  2  3    4
1  0  4 -149  -185
2  4  0  -145  -181
....

谢谢

最佳答案

df['date'] = pd.to_datetime(df['date'])
df.set_index('id', inplace=True)

您可以从其中的每个值中减去日期列的所有值,最终结果是:

df['date'].apply(lambda x:x-df['date'])
id        1        2         3         4
id                                      
1    0 days  -4 days -149 days -185 days
2    4 days   0 days -145 days -181 days
3  149 days 145 days    0 days  -36 days
4  185 days 181 days   36 days    0 days

如果你不想显示days字符串,你可以使用dt.days属性来获取天数:

df['date'].apply(lambda x:x-df['date']).apply(lambda x: x.dt.days)
id    1    2    3    4
id                    
1     0   -4 -149 -185
2     4    0 -145 -181
3   149  145    0  -36
4   185  181   36    0

如果你想获得 numpy 数组,你最终可以使用 .values 属性:

df['date'].apply(lambda x:x-df['date']).apply(lambda x: x.dt.days).values

array([[   0,   -4, -149, -185],
       [   4,    0, -145, -181],
       [ 149,  145,    0,  -36],
       [ 185,  181,   36,    0]], dtype=int64)

关于python - 从所有其他行中减去每一行并在 python 中查看为矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67876963/

相关文章:

python - 在 Python 中从 XML 中获取文本值

Python 数据矩阵检测

python - 实现luigi动态图配置

python - 优化 - 数据帧聚合在聚合过程中是否会使用不同的过滤器 : df. loc?

python - 为什么 .ix 包含在索引范围的末尾?

python - pandas dataframe,按另一列中的值排名,不使用 Python FOR 循环

python - 将 pandas 列从对象转换为字符串或 int/float 类型是否有必要或有益?

python - 调用"pygame.error: video system not initialized"后为"pygame.event.get()"

python - 如何传递日期参数在python pandas中执行sql存储过程

r - 超过 R 中的内存限制(即使使用 24GB RAM)