Редактирование значений столбцов фрейма данных в определенном формате

#python #pandas

#python #pandas

Вопрос:

У меня есть следующий фрейм данных () df4 :

     hour  counted
0      0      0.0
1      1      0.0
2      2      0.0 
3      3      0.0
4      4      0.0
5      5      0.0
6      6      0.0
7      7      0.0
8      8      0.0
9      9      0.0
10    10    792.0
11    11    792.0
12    12      0.0
13    13      0.0
14    14    594.0
15    15    198.0
16    16    198.0
17    17      0.0
18    18      0.0
19    19      0.0
20    20      0.0
21    21      0.0
22    22      0.0
23    23      0.0
 

Который я позже использую в виде штриховой диаграммы. Вместо одного числа за час я хочу отображать значения как «час: 00 — час: 59».

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

        hour_display     counted
0      0:00 - 0:59      0.0
1      1:00 - 1:59      0.0
2      2:00 - 2:59      0.0 
3      3:00 - 3:59      0.0
 

…etc

или

hour_display может быть его собственным столбцом, например:

     hour  counted   hour_display
0      0      0.0   0:00 - 0:59
1      1      0.0   1:00 - 1:59 
2      2      0.0   2:00 - 2:59
 

Вот что мне надоело:

 #make an empty df for edited values
df5 = pd.DataFrame(columns=['hour_display'])

for x in df4['hour']:
    x = str(x)   ":00 - "   str(x)   ":59"
    print(x) #for test
    df5.append([{'hour_display': x}], ignore_index=True )

print(df5) #for test
df4.append(df5)
 

Странно то, что когда я print(x) внутри цикла for, он показывает нужные мне значения. Но когда я пытаюсь print(df5) , фрейм данных пуст. Поэтому я не могу подключить df4 и df5.

Ответ №1:

Нет необходимости использовать for цикл для перебора значений в hour столбце, вы можете просто объединить столбцы после добавления нужного suffix :

 s = df4['hour'].astype(str)
df4['hour_display'] = s.add(':00')   '-'   s.add(':59')
 

     hour  counted hour_display
0      0      0.0    0:00-0:59
1      1      0.0    1:00-1:59
2      2      0.0    2:00-2:59
3      3      0.0    3:00-3:59
...
 

Ответ №2:

Это может сработать для вас. Вместо создания нового df5 просто добавьте новый столбец с желаемыми значениями. Затем просто выберите столбцы, которые вы хотите отобразить в Dash.

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

 def hour_disply(x):
    return str(x)   ":00 - "   str(x)   ":59"

df4['hour_display'] = df4['hour'].apply(lambda x: hour_disply(x))

 

Ответ №3:

Это было бы не лучшим вариантом кода, но оно должно сработать

 Hours = []

for index,rows in df4.iterrows():

    x = str(df4.hour.iloc[index])   ":00 - "   str(df4.hour.iloc[index])   ":59"
    print(x) #for test
    Hours.append(x)

Final = pd.DataFrame([Hours,df4["counted"].values]).T
Final.columns = ["hour_display","counted"]