熊猫groupby count共存

时间:2019-03-11 06:39:39

标签: python pandas dataframe group-by

我想按产品获得国家的亲和力。 我有这样的df:

   cntr  prod
0  fr    cheese
1  ger   potato
2  it    cheese
3  it    tomato
4  fr    wine
5  it    wine
6  ger   cabbage
7  fr    cabbage

我试图获取产品数量的共存矩阵,这样可以告诉我国家的亲和力,如下所示:

    fr   ger  it
fr       1    2
ger 1         0
it  2    0

我的测试是首先尝试通过添加第三维来进行交叉分组

fr   fr
     ger  1
     it   2
ger  fr   1
     ger
     it   0
it   fr   2
     ger  0
     it

这是我尝试过的方法,但未能添加第二层。 有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我相信您需要mergecrosstab进行交叉连接,并在必要时将numpy.fill_diagonal的对角线设置为NaN

df = pd.merge(df, df, on='prod')
df = pd.crosstab(df['cntr_x'], df['cntr_y']).astype(float)
np.fill_diagonal(df.values, np.nan)
print (df)
cntr_y   fr  ger   it
cntr_x               
fr      NaN  1.0  2.0
ger     1.0  NaN  0.0
it      2.0  0.0  NaN