не может построить групповой объект в пандах - PullRequest
0 голосов
/ 29 июня 2019

Я применил метод groupby к моему фрейму данных df, чтобы получить среднее значение для каждого значения моего столбца X (в процентах)

df1 = df.groupby('percentage')['ratio'].mean()

то есть для каждого процентного значения у меня есть среднее значение отношения (потому что у меня было много точек данных).

Теперь я хочу построить новый процент (X) против новых значений отношения (Y), но не могу как-то. df1 [:, 0] выдает мне сообщение об ошибке, как будто это не вызов write для моего первого столбца.

как я могу построить эти 2 столбца?

это вывод df1:

percentage
0.000000    0.987699
0.000144    0.974359
0.000461    0.930000
0.001427    0.880549
0.006119    0.968185
0.008497    0.968686
0.017821    0.970008
0.028747    0.976759
0.030128    0.975607
0.038823    0.979795
0.043440    0.979847
Name: ratio, Length: 61, dtype: float64

Ответы [ 4 ]

2 голосов
/ 29 июня 2019

df1 является pandas.Series.С пандами можно использовать maplotlib со встроенными функциями, такими как pandas.plot().Вы можете сделать:

import matplotlib.pyplot as plt
axes = df1.plot()
axes.set_ylabel(df1.name)
plt.show()

enter image description here

1 голос
/ 29 июня 2019

Вы не можете получить доступ к определенным столбцам, потому что имеете дело с сериями, а не с фреймом данных.

type(df.groupby('percentage')['ratio'].mean())
# pandas.core.series.Series

Я думаю, .reset_index() должно помочь, поскольку оно преобразует ваши результаты в фрейм данных

type(df.groupby('percentage')['ratio'].mean().reset_index())
# pandas.core.frame.DataFrame

Итак, когда вы используете .reset_index(), вы можете назначать столбцы переменным:

new_df = df.groupby('percentage')['ratio'].mean().reset_index()
x, y = (new_df['percentage'], new_df['ratio'])
1 голос
/ 29 июня 2019

Просто сюжет df1.

import random
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

p = [.1,.2,.3,.4,.5,.6,.7, .8,.9]
p = [random.choice(p) for _ in range(180)]
r = np.linspace(.001, .999, num=180)

df = pd.DataFrame({'pct':p, 'ratio':r})
df1 = df.groupby('pct')['ratio'].mean()
df1.plot()
plt.show()
plt.close()
1 голос
/ 29 июня 2019

Ну, это действительно странно, но df1 - это серия, а не датафрейм. строка слева - это индекс серии, а справа - значения, поэтому print(df[0.017821]) напечатает 0.970008, вы все равно можете получить доступ к этим значениям

percentage = list(df1.index)
ratio = df1.values

Вот почему вы получили сообщение об ошибке, серии имеют одну ось

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