Группировка столбца по дате и применение функции для группировки по

Я пытался задать вопрос ранее, но удалил, чтобы я мог задать более четко и показать, что я пытаюсь, если это близко.

Мой образец df

    day         a   b
  5/11/19       3   1
  5/11/19       4   6
  5/12/19       1   2
  5/12/19       5   9
  5/13/19      11   14

Я хочу сгруппировать по столбцу дня и хочу иметь новый df, который вычисляет как для col a, так и для col b количество значений, которые <10/все значения для этого дня и столбца (a или b) как %. Так как есть многочисленные строки на каждый день.

Я пытаюсь что-то вроде

def calc_(group_df):
result = dict()
result["x"] = group_df[(group_df.x) < 10] / len(group_df.x)
result["y"] = group_df[(group_df.y) < 10] / len(group_df.y)
return pd.Series(result, index=["x", "y"])

а потом

df.groupby("day").apply(calc)

но я получаю ошибку

TypeError: Не удалось работать 163143 со значениями блока, неподдерживаемые типы операндов для /: 'str' и 'int'

Я что-то пропустил?

Я хочу, чтобы мой окончательный результат

     day         a   b
  5/11/19       .3  .1
  5/12/19       .5  .9
  5/13/19       .1  .4

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

ваши типы данных не совпадают, вы делите string на и integer

It_is_Chris 29.05.2019 22:30

@ Крис, спасибо, сэр, я могу как-то это решить?

Chris90 29.05.2019 22:38
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не совсем уверен, как вы хотите, чтобы ваш окончательный фрейм данных выглядел, но похоже, что это то, что вы можете сделать.

Используя этот фрейм данных в качестве входных данных:

       day   a   b
0  5/11/19   3   1
1  5/11/19  11   3
2  5/12/19   5   9
3  5/13/19  11  14

def calc(df):

    len_a_under_10 = (df['a'] < 10).sum() / len(df['a'])
    len_b_under_10 = (df['b'] < 10).sum() / len(df['b'])

    df['a_under_10'] = len_a_under_10
    df['b_under_10'] = len_b_under_10

return df

df.groupby('day').apply(calc)

Дает:

       day   a   b  a_under_10  b_under_10
0  5/11/19   3   1         0.5         1.0
1  5/11/19  11   3         0.5         1.0
2  5/12/19   5   9         1.0         1.0
3  5/13/19  11  14         0.0         0.0

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

Chris90 30.05.2019 03:28

Другие вопросы по теме