Создавать значения в столбце после groupby - PullRequest
0 голосов
/ 17 июня 2020

У меня есть фрейм данных, который получается после группировки исходного фрейма данных по столбцам "час" и "сайт". Таким образом, текущий фрейм данных содержит подробную информацию о «значении», сгруппированном по «часам» и «участкам». Я хочу заполнить час, не имеющий «ценности», нулем. Диапазон «Час» от 0 до 23. как это сделать?

Слева - вход, справа - ожидаемый результат

enter image description here

Ответы [ 2 ]

1 голос
/ 17 июня 2020

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

import pandas as pd
import numpy as np
df = pd.DataFrame({'Date':['10/2/2011', '11/2/2011', '12/2/2011', 
'13/2/2011','14/2/2011'], 
               'Product':['Umbrella', 'Matress', 'Badminton', 'Shuttle','ewf'], 
               'Last_Price':[1200, 1500, 1600, 352,'ee'], 
               'Updated_Price':[12, 24, 0, 1,np.nan],
               'Discount':[10, 10, 10, 10, 11]}) 
df['Updated_Price'] = df['Updated_Price'].fillna(0)
df.loc[df['Updated_Price']>23,'Updated_Price']=0

Это заменяет все значения nan на 0, а для значений больше 23 также заменяет на 0

1 голос
/ 17 июня 2020

Вы можете попробовать это:

import numpy as np
import pandas as pd

raw_df = pd.DataFrame(
    {
        "Hour": [1, 2, 4, 12, 0, 2, 7, 13],
        "Site": ["x", "x", "x", "x", "y", "y", "y", "y"],
        "Value": [1, 1, 1, 1, 1, 1, 1, 1],
    }
)
full_hour = pd.DataFrame(
    {
        "Hour": np.concatenate(
            [range(24) for site_name in raw_df["Site"].unique()]
        ),
        "Site": np.concatenate(
            [[site_name] * 24 for site_name in raw_df["Site"].unique()]
        ),
    }
)
result = full_hour.merge(raw_df, on=["Hour", "Site"], how="left").fillna(0)

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

...