#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"]