如何将具有公共值的组划分为两列?

2024-10-01 07:47:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含两列的csv文件,如下所示:(一个动物可以有很多类,但如果它在同一类中出现多次,我们必须只计算一次)

animal_id class
65HddD   class-a
65HddD   class-a
65HddD   class-b
65HddD   class-c
7DHSKQ   class-d
7DHSKQ   class-e
7DHSKQ   class-f
9JSJSZ   class-g
ZDKSKS   class-h
9SJSSF   class-i
ZSKSSS   class-j
9SJSSZ   class-k
... etc

我搜索以获得这样的数据帧(其中的值是两个类中常见的独特动物的数量):

例如,下面的值20表示a类和b类中存在的独特动物的数量。值40表示仅在a类中出现的唯一动物的数量(但我们不必计算同一类中出现2次的动物的次数)

             class-a class-b class-c class-d class-n
    class-a  40       20     VALUE
    class-b 
    class-c
    class-d
    class-n

我尝试过,但没有成功:

import pandas as pd

animals_groups = pd.read_csv("animals.csv", sep="\s+") 

animals_groups.pivot_table(values="animal_id", index="class", columns="class", aggfunc="nunique")


Tags: 文件csv数据id数量etc次数class
1条回答
网友
1楼 · 发布于 2024-10-01 07:47:44

^{}^{}一起使用:

df = df.merge(df, on='animal_id')
df = df.pivot_table(values="animal_id", 
                    index="class_x", 
                    columns="class_y", 
                    aggfunc="nunique",
                    fill_value=0)

print (df)
class_y  class-a  class-b  class-c  class-d  class-e  class-f  class-g  \
class_x                                                                  
class-a        1        1        1        0        0        0        0   
class-b        1        1        1        0        0        0        0   
class-c        1        1        1        0        0        0        0   
class-d        0        0        0        1        1        1        0   
class-e        0        0        0        1        1        1        0   
class-f        0        0        0        1        1        1        0   
class-g        0        0        0        0        0        0        1   
class-h        0        0        0        0        0        0        0   
class-i        0        0        0        0        0        0        0   
class-j        0        0        0        0        0        0        0   
class-k        0        0        0        0        0        0        0   

class_y  class-h  class-i  class-j  class-k  
class_x                                      
class-a        0        0        0        0  
class-b        0        0        0        0  
class-c        0        0        0        0  
class-d        0        0        0        0  
class-e        0        0        0        0  
class-f        0        0        0        0  
class-g        0        0        0        0  
class-h        1        0        0        0  
class-i        0        1        0        0  
class-j        0        0        1        0  
class-k        0        0        0        1  

相关问题 更多 >