我有以下数据框。
df = pd.DataFrame([['a', 4], ['b', 1], ['c', 2], ['d', 0], ], columns=['item', 'value'])
df
item | value
a | 4
b | 1
c | 2
d | 0
我想计算每个可能的项目对之间的成对绝对差,以提供以下输出。
item| a | b | c | d
a | 0.0 | 3.0 | 2.0 | 4.0
b | 3.0 | 0.0 | 1.0 | 1.0
c | 2.0 | 1.0 | 0.0 | 2.0
d | 4.0 | 1.0 | 2.0 | 0.0
经过大量搜索,我只能找到直接针对逐个元素差异的答案,这将导致单列输出。
到目前为止,我已经尝试过
pd.pivot_table(df, values='value', index='item', columns='item', aggfunc=np.diff)
但这不起作用。
答案 0 :(得分:3)
此问题已经here回答。唯一的区别是您需要添加abs
:
abs(df['value'].values - df['value'].values[:, None])
答案 1 :(得分:1)
输出不完全相同,但可以从此处得到提示:https://stackoverflow.com/a/9704775/2064141
您可以尝试以下方法:
np.abs(np.array(df['value'])[:,np.newaxis] - np.array(df['value']))
哪个给:
array([[0, 3, 2, 4],
[3, 0, 1, 1],
[2, 1, 0, 2],
[4, 1, 2, 0]])
尽管我刚刚看到了Harm te Molder的链接,但它似乎与您的使用更为相关。