Панды, применяющие подмножество данных к новому фрейму данных - PullRequest
1 голос
/ 17 октября 2019

У меня есть скрипт, в котором я выполняю манипулирование с фреймами данных и извлекаю данные, как показано ниже:

times = pd.Series(df.loc[df['sy_x'].str.contains('AA'), ('t_diff')].quantile([.1, .25, .5, .75, .9]))

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

   ID pt_1 pt_2 pt_5 pt_7 pt_9
   AA
   BB
   CC

Как я могу добавить квантили к каждой строке идентификатора?

new_df = None
for index, value in times.items():
   for col in df[['pt_1', 'pt_2','pt_5','pt_7','pt_9',]]:

.. но это неправильно и не идиоматично. Должен ли я использовать loc или iloc? У меня есть еще пара серий, которые мне нужно будет добавить в другие не показанные столбцы, но я думаю, что смогу это выяснить, когда узнаю

РЕДАКТИРОВАТЬ: Некоторые результаты times выглядят так:

0.1  -0.5
0.25 -0.3
0.5   0.0
0.75  2.0
0.90  4.0

Заранее благодарим за любые идеи

Ответы [ 2 ]

1 голос
/ 17 октября 2019

IIUC, вы хотите groupby():

# toy data
np.random.seed(1)
df = pd.DataFrame({'sy_x':np.random.choice(['AA','BB','CC'], 100),
                   't_diff': np.random.randint(0,100,100)})

df.groupby('sy_x').t_diff.quantile((0.1,.25,.5,.75,.9)).unstack(1)

Вывод:

      0.10   0.25  0.50   0.75  0.90
sy_x                                
AA    16.5  22.25  57.0  77.00  94.5
BB     9.1  21.00  58.5  80.25  91.3
CC     9.7  23.25  40.5  65.75  84.1
1 голос
/ 17 октября 2019

Попробуйте что-то вроде:

pd.DataFrame(times.values.T, index=times.keys())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...