熊猫-组织和统计独特的数据

时间:2020-06-16 16:23:33

标签: python pandas

如何用熊猫来做到这一点?

我有这个数据集,它由汽车及其颜色的列表组成(汽车和颜色可能重复):

 Color   Car      

 Blue    Honda       
 Green   Honda     
 Green   Honda      
 Blue    fiat             
 Black   fiat    
 ....
 Yellow  nissan

我想为每辆汽车创建一个具有其各自颜色的列(没有与每辆汽车相关的重复颜色)。在该示例中,本田和绿色发生两次,但在本田列中,“绿色”仅出现一次。

类似这样的东西:

+----------------------+------------+----------------------+---------+
|           Color      |    Car     |   Honda              | Fiat    |
+----------------------+------------+----------------------+---------+
| Blue                 | Honda      |Blue                  |Blue
| Green                |  Honda      Green                 |Black
| Green                | Honda      |Yellow                   
|  Blue                | fiat                                                
|  Black               | fiat            
….
| Yellow               | nissan         
+-----------------------------------+------------+--------+

我还想知道每辆车有多少种颜色(没有重复)(“可乐”列中与“汽车”列中每个项目相关的唯一项的数量)。

1 个答案:

答案 0 :(得分:1)

尝试joinpd.crosstab

df1 = df.join(
    pd.crosstab(df.index, df["Car"], df["Color"], aggfunc="first").fillna(" ")
)

print(df1)
    Color     Car  Honda   fiat  nissan
0    Blue   Honda   Blue               
1   Green   Honda  Green               
2   Green   Honda  Green               
3    Blue    fiat          Blue        
4   Black    fiat         Black        
5  Yellow  nissan                Yellow

对于根据您的示例输出的唯一颜色,我们可以创建一个布尔蒙版并将其应用回pd.crosstab中的values参数

unique_color = np.where(
    df.groupby(['Car','Color']).cumcount().ge(1), "", df["Color"]
)

df1 = df.join(pd.crosstab(df.index, df["Car"], unique_color, aggfunc="first").fillna(" ")
       )

print(df1)

   Color     Car  Honda   fiat  nissan
0    Blue   Honda   Blue               
1   Green   Honda  Green               
2   Green   Honda                      
3    Blue    fiat          Blue        
4   Black    fiat         Black        
5  Yellow  nissan                Yellow
相关问题