首页 > 解决方案 > Pandas中每对行的乘法

问题描述

你好我有这个数据集

Month   Value
Jan      15
Feb      2
Mar      8
Apr      4
May      9

如何通过每对月份的值相乘来获得一个新的数据框?

例如像这样

     Jan   Feb   Mar   Apr   May
Jan   -    30    120   60    135
Feb   30   -     16    8     18
Mar   120  16    -     32    72
Apr   60   8     32    -     36
May   135  18    72    36    -

标签: pythonpandasdataframe

解决方案


在将 Month 设置为索引后,您可以使用带有转置数据框的点积,然后使用掩码忽略匹配的索引和列:

u = df.set_index("Month")
v = u.dot(u.T)
m = list(v.columns)==v.index.to_numpy()[:,None]
out = v.mask(m)#.rename_axis(columns=None)

print(out)

Month    Jan   Feb    Mar   Apr    May
Month                                 
Jan      NaN  30.0  120.0  60.0  135.0
Feb     30.0   NaN   16.0   8.0   18.0
Mar    120.0  16.0    NaN  32.0   72.0
Apr     60.0   8.0   32.0   NaN   36.0
May    135.0  18.0   72.0  36.0    NaN

推荐阅读