每个可能的配对的熊猫列成对差异

时间:2019-02-05 07:44:06

标签: pandas dataframe

我有以下数据框。

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)

但这不起作用。

2 个答案:

答案 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的链接,但它似乎与您的使用更为相关。