Pandas使用

2024-05-18 07:14:43 发布

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

我有一个名为dfDays的数据帧,如下所示:

siren   Groupe  nomination_frequence    demission_frequence depart_frequence    modification_frequence  deces_frequence confirmation_frequence  sansprecision_frequence nbJoursMoyenne  ecart_type  nbJoursDernierEvenementExtraction
0   XXX Dirigeants  1   0   0   0   0   0   0   None    NaN 2345
1   XXX Autres  2   0   2   0   0   0   0   191 270.586 1217
2   XXX Dirigeants  0   0   0   0   0   0   3   281 281 1283
3   XXX Dirigeants  2   2   0   0   0   0   0   61  86.7384 1583
4   XXX Dirigeants  1   1   0   0   0   0   5   93  136.118 1283

我在一个名为dfNew的新datadrame中添加了dfDays的值,但是根据“groupe”添加了一个类别

假设我想要获得的最终数据帧是:(不要看这些值)

^{pr2}$

我的代码如下:

liste_nom = ['nomination_frequence','demission_frequence','depart_frequence','modification_frequence','deces_frequence','confirmation_frequence','sansprecision_frequence',
             'nbJoursMoyenne','ecart_type', 'nbJoursDernierEvenementExtraction']

for index, row in dfDays.iterrows():
    #print(row)
    name = row['Groupe']
    siren = row['siren']
    index = dfRight[dfRight['siren'] == siren].index[0]

    print(dfNew.columns)
    for value in liste_nom:
        #print(row)
        #print(row[value])
        dfNew.loc[index, name + '_' + value] = row[value]
print(dfNew.columns)

我的问题是,在使用first.loc和index之前,我的列在dfNew中如下所示:

Index(['siren', 'Dirigeants_nomination_frequence',
       'Dirigeants_demission_frequence', 'Dirigeants_depart_frequence',
       'Dirigeants_modification_frequence', 'Dirigeants_deces_frequence',
       'Dirigeants_confirmation_frequence',
       'Dirigeants_sansprecision_frequence',
       'MembresDuConseil_nomination_frequence',
       'MembresDuConseil_demission_frequence',
       'MembresDuConseil_depart_frequence',
       'MembresDuConseil_modification_frequence',
       'MembresDuConseil_deces_frequence',
       'MembresDuConseil_confirmation_frequence',
       'MembresDuConseil_sansprecision_frequence',
       'Autres_nomination_frequence', 'Autres_demission_frequence',
       'Autres_depart_frequence', 'Autres_modification_frequence',
       'Autres_deces_frequence', 'Autres_confirmation_frequence',
       'Autres_sansprecision_frequence', 'mouvements_nbJoursMoyenne',
       'mouvement_ecart_type'],
      dtype='object')

但在多次使用.loc之后,列被交换,如下所示:

Index(['siren', 'Dirigeants_nomination_frequence',
       'Dirigeants_demission_frequence', 'Dirigeants_depart_frequence',
       'Dirigeants_modification_frequence', 'Dirigeants_deces_frequence',
       'Dirigeants_confirmation_frequence',
       'Dirigeants_sansprecision_frequence',
       'MembresDuConseil_nomination_frequence',
       'MembresDuConseil_demission_frequence',
       'MembresDuConseil_depart_frequence',
       'MembresDuConseil_modification_frequence',
       'MembresDuConseil_deces_frequence',
       'MembresDuConseil_confirmation_frequence',
       'MembresDuConseil_sansprecision_frequence',
       'Autres_nomination_frequence', 'Autres_demission_frequence',
       'Autres_depart_frequence', 'Autres_modification_frequence',
       'Autres_deces_frequence', 'Autres_confirmation_frequence',
       'Autres_sansprecision_frequence', 'mouvements_nbJoursMoyenne',
       'mouvement_ecart_type', 'Dirigeants_nbJoursMoyenne',
       'Dirigeants_ecart_type', 'Dirigeants_nbJoursDernierEvenementExtraction',
       'Autres_nbJoursMoyenne', 'Autres_ecart_type',
       'Autres_nbJoursDernierEvenementExtraction',
       'MembresDuConseil_nbJoursMoyenne', 'MembresDuConseil_ecart_type',
       'MembresDuConseil_nbJoursDernierEvenementExtraction'],
      dtype='object')

我不明白.loc的用法如何能够交换列的顺序? 谢谢你的阅读。在


Tags: typesirenconfirmationmodificationdepartecartfrequencenomination
1条回答
网友
1楼 · 发布于 2024-05-18 07:14:43

我想您需要^{}来重塑形状,然后用map和{}将列中的{}展平:

print (df)
  siren      Groupe  nomination_frequence  demission_frequence
1     b      Autres                2.0000                  191
2     c  Dirigeants              281.0000                 1283
3     d  Dirigeants               86.7384                 1583
4     e  Dirigeants              136.1180                 1283

第一个按列表筛选列:

^{pr2}$

但如果得到:

ValueError: Index contains duplicate entries, cannot reshape

这意味着新索引和列的列对中存在重复项。在

因此需要^{}和一些聚合函数,如mean

print (df)
  siren      Groupe  nomination_frequence  demission_frequence
1     b      Autres                2.0000                  191 <-same b,Autres 
1     b      Autres                5.0000                   50 <-same b,Autres 
2     c  Dirigeants              281.0000                 1283
3     d  Dirigeants               86.7384                 1583
4     e  Dirigeants              136.1180                 1283

liste_nom = ['nomination_frequence','demission_frequence', ...] + ['siren','Groupe']

df = df[liste_nom]

df = df.pivot_table(index='siren', columns='Groupe', aggfunc='mean')
df.columns = df.columns.map('_'.join)
print (df)
       demission_frequence_Autres  demission_frequence_Dirigeants  \
siren                                                               
b                           120.5                             NaN (191 + 50)/2 = 120.5  
c                             NaN                          1283.0   
d                             NaN                          1583.0   
e                             NaN                          1283.0   

       nomination_frequence_Autres  nomination_frequence_Dirigeants  
siren                                                                
b                              3.5                              NaN  
c                              NaN                         281.0000  
d                              NaN                          86.7384  
e                              NaN                         136.1180  

但如果需要通过交换和排序来更改列名称:

liste_nom = ['nomination_frequence','demission_frequence'] + ['siren','Groupe']
df = df[liste_nom]
df = df.pivot_table(index='siren', columns='Groupe', aggfunc='mean')
df = df.swaplevel(0,1, axis=1).sort_index(axis=1)
df.columns = df.columns.map('_'.join)
print (df)
       Autres_demission_frequence  Autres_nomination_frequence  \
siren                                                            
b                           120.5                          3.5   
c                             NaN                          NaN   
d                             NaN                          NaN   
e                             NaN                          NaN   

       Dirigeants_demission_frequence  Dirigeants_nomination_frequence  
siren                                                                   
b                                 NaN                              NaN  
c                              1283.0                         281.0000  
d                              1583.0                          86.7384  
e                              1283.0                         136.1180  

相关问题 更多 >