Объедините три таблицы и определенно сортируйте столбцы в pandas - PullRequest
1 голос
/ 02 апреля 2020

У меня есть три кадра данных, которые отличаются только одним столбцом. Они перечисляют среднее значение, стандартное отклонение и количество, как показано ниже:

таблица 1

Name Treatment Pool_mean
ATP  1Week     100
ATP  4Week    500
ATP  16Weeks   1500
GTP  4Week     1000
GTP  1Week     250
GTP  16Weeks   12000

таблица 2

Name Treatment Pool_std
ATP  1Week     2
ATP  4Week    5
ATP  16Weeks   15
GTP  4Week     7
GTP  1Week     2
GTP  16Weeks   30

таблица 3

Name Treatment Pool_count
ATP  1Week     3
ATP  4Week    5
ATP  16Weeks   4
GTP  4Week     5
GTP  1Week     3
GTP  16Weeks   4

Мне нужно получить таблицу, которая выглядит следующим образом:

           1Week     1Week   1Week        4Weeks    4Weeks    4Weeks    16Weeks 16Weeks 16 Weeks
           pool_mean pool_std pool_count pool_mean pool_std pool_count pool_mean pool_std pool_count
  Name ATP 100        2        3         500        5         5         1500       15          4      
  Name GTP 250        2        3         1000       7         5         12000      30          4

Я просто не знаю, что делать. Я дошел до написания этого кода:

df1 = pd.DataFrame(averages)
df2 = pd.DataFrame(stddev)
df3 = pd.DataFrame(count)
dfs = [df1, df2, df3]
dfs1 = pd.concat(dfs, axis=1).T.drop_duplicates().T
print(dfs1)
dfs1.to_csv('pool_merged.csv')

Но в итоге все мои столбцы помещаются в один довольно плоский файл, и это здорово, но не то, что мне нужно. Я действительно потерян в этот момент (я очень новичок в этом).

Любая помощь будет оценена.

1 Ответ

1 голос
/ 02 апреля 2020

Вы можете попробовать приведенное ниже решение, которое согласуется с заданным индексом и unstack, затем меняет уровень и сортирует индекс с помощью natsort:

import natsort as ns
dfs = [df1,df2,df3]
out = (pd.concat([i.set_index(['Name','Treatment']).unstack() for i in dfs],axis=1)
      .swaplevel(axis=1))
out = out.reindex(columns=ns.natsorted(out.columns.get_level_values(0).unique()),level=0)

print(out)

Treatment     1Week                         4Week                      \
          Pool_mean Pool_std Pool_count Pool_mean Pool_std Pool_count   
Name                                                                    
ATP             100        2          3       500        5          5   
GTP             250        2          3      1000        7          5   

Treatment   16Weeks                      
          Pool_mean Pool_std Pool_count  
Name                                     
ATP            1500       15          4  
GTP           12000       30          4  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...