Объединение двух столбцов в DataFrame с именами переменных столбцов - PullRequest
0 голосов
/ 01 апреля 2019

Редактирование моего исходного сообщения, чтобы, надеюсь, упростить мой вопрос ... Я объединяю несколько DataFrames в один SomeData.DataFrame, что дает мне следующее:

     Key     2019-02-17    2019-02-24_x    2019-02-24_y    2019-03-03
0    A        80           NaN             NaN              80                         
1    B        NaN          NaN             45               36         
2    C        44           NaN             39              NaN            
3    D        80           NaN             NaN              12                         
4    E        49            2              NaN             NaN              

Что я пытаюсь сделатьТеперь эффективно объединить столбцы, заканчивающиеся на «_x» и «_y», сохраняя все остальное на месте, чтобы я получил:

     Key     2019-02-17    2019-02-24     2019-03-03
0    A        80           NaN             80                         
1    B        NaN          45              36         
2    C        44           39              NaN            
3    D        80           NaN             12                         
4    E        49            2              NaN              

Другая проблема, которую я пытаюсь объяснить, состоит в том, что содержащиеся в нем данныев SomeData.DataFrame меняется еженедельно, так что заголовки моих столбцов непредсказуемы.Это означает, что в некоторые недели у меня может вообще не быть вышеуказанной проблемы, а в другие недели может быть несколько примеров, например:

     Key  2019-02-17  2019-02-24_x  2019-02-24_y  2019-03_10_x  2019-03-10_y  
  0   A       80           NaN          NaN           80          NaN   
  1   B       NaN          NaN           45           36          NaN              
  2   C       44           NaN           39          NaN           12   
  3   D       80           NaN          NaN           12          NaN                
  4   E       49            2           NaN          NaN           17

Так что желаемый результат снова будет:

     Key  2019-02-17  2019-02-24   2019-03_10   
  0   A       80           NaN          80            
  1   B       NaN          45           36                       
  2   C       44           39           12   
  3   D       80           NaN          12                          
  4   E       49            2           17    

Разумно ли то, что я спрашиваю, или я рискну выйти за пределы Панд?Я не могу найти никого, кто пытается сделать что-то подобное, поэтому я не уверен больше.Заранее спасибо!

1 Ответ

0 голосов
/ 01 апреля 2019

Отредактированный ответ на обновленный вопрос:

df = df.set_index('Key')
df.groupby(df.columns.str.split('_').str[0], axis=1).sum()

Выход:

         2019-02-17  2019-02-24  2019-03-03
    Key                                    
    A          80.0         0.0        80.0
    B           0.0        45.0        36.0
    C          44.0        39.0         0.0
    D          80.0         0.0        12.0
    E          49.0         2.0         0.0

Second dataframe Output:

df.groupby(df.columns.str.split('_').str[0], axis=1).sum()

Output:

     2019-02-17  2019-02-24  2019-03-10
Key                                    
A          80.0         0.0        80.0
B           0.0        45.0        36.0
C          44.0        39.0        12.0
D          80.0         0.0        12.0
E          49.0         2.0        17.0

You could try something like this:

    df_t = df.T
    df_t.set_index(df_t.groupby(level=0).cumcount(), append=True)\
        .unstack().T\

    .sort_values(df.columns[0])[df.columns.unique()]\
    .reset_index(drop=True)

Выход:

  val03-20 03-20 val03-24 03-24
0        a     1        d     5
1        b     6        e     7
2        c     4        f    10
3      NaN   NaN        g     5
4      NaN   NaN        h     6
5      NaN   NaN        i     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...