Pandas - систематизировать и подсчитывать уникальные данные - PullRequest
0 голосов
/ 16 июня 2020

Как это сделать с pandas?

У меня есть этот набор данных, который состоит из списка автомобилей и их цветов (автомобили и цвета могут повторяться):

 Color   Car      

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

Я хотел бы создать столбец для каждой машины с ее соответствующим цветом (без дублирования цветов, связанных с каждой машиной). В этом примере Honda & green встречается дважды, но в столбце honda «зеленый» появляется только один раз.

Примерно так:

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

Я также хотел бы знать, сколько цветов (без дубликатов) у каждой машины (количество уникальных элементов в столбце «Colar», относящихся к каждому элементу в графе «Автомобиль»).

1 Ответ

1 голос
/ 16 июня 2020

попробуйте join с pd.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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...