我正在尝试创建一个矩阵来显示Pandas数据框中行之间的差异.
import pandas as pd
data = {'Country':['GB','JP','US'],'Values':[20.2,-10.5,5.7]}
df = pd.DataFrame(data)
Run Code Online (Sandbox Code Playgroud)
我想这个:
Country Values
0 GB 20.2
1 JP -10.5
2 US 5.7
Run Code Online (Sandbox Code Playgroud)
要成为这样的东西(差异垂直):
Country GB JP US
0 GB 0.0 -30.7 14.5
1 JP 30.7 0.0 16.2
2 US 14.5 -16.2 0.0
Run Code Online (Sandbox Code Playgroud)
这是通过内置函数实现的还是我需要构建一个循环来获得所需的输出?谢谢你的帮助!
这是numpy 广播的标准用例:
df['Values'].values - df['Values'].values[:, None]
Out:
array([[ 0. , -30.7, -14.5],
[ 30.7, 0. , 16.2],
[ 14.5, -16.2, 0. ]])
Run Code Online (Sandbox Code Playgroud)
我们使用values属性访问底层的numpy数组,并[:, None]引入一个新轴,因此结果是二维的.
您可以使用原始系列连接:
arr = df['Values'].values - df['Values'].values[:, None]
pd.concat((df['Country'], pd.DataFrame(arr, columns=df['Country'])), axis=1)
Out:
Country GB JP US
0 GB 0.0 -30.7 -14.5
1 JP 30.7 0.0 16.2
2 US 14.5 -16.2 0.0
Run Code Online (Sandbox Code Playgroud)
由于@Divakar,也可以使用以下代码生成数组:
arr = np.subtract.outer(*[df.Values]*2).T
Run Code Online (Sandbox Code Playgroud)
在这里,我们呼吁.outer在subtractufunc,它适用于所有对其输入.
| 归档时间: |
|
| 查看次数: |
2067 次 |
| 最近记录: |