#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
У меня есть фрейм данных со значениями date, категории, которые случайным образом назначаются из одной буквы в 3 строки символов, и частоты [‘A’, ‘B’, ‘C’]
Я хотел бы изменить исходный фрейм данных так, чтобы я получал дату и каждую категорию в виде столбца, назначал частоту, соотносимую с категорией для столбца категории, и сохранял нулевые значения как None
Как я могу это сделать?
This is my df (i forgot to include the index):
-------- ---------- ------- ------- -------
| Date | Category | freqA | freqB | freqC |
-------- ---------- ------- ------- -------
| 2/1/19 | A | 2 | 89 | 7 |
-------- ---------- ------- ------- -------
| 2/2/19 | B | 5 | 98 | 8 |
-------- ---------- ------- ------- -------
| 2/3/19 | A | 10 | 100 | 12 |
-------- ---------- ------- ------- -------
| 2/4/19 | A | 17 | 121 | 15 |
-------- ---------- ------- ------- -------
| 2/5/29 | C | 21 | 133 | 25 |
-------- ---------- ------- ------- -------
| 2/6/19 | C | 25 | 134 | 31 |
-------- ---------- ------- ------- -------
This is my target df:
------ ----------- ----------- ----------- -------------
| Date | CategoryA | CategoryB | CategoryC | Category[a] |
------ ----------- ----------- ----------- -------------
| Date | freqA | freqA | freqA | freqA |
------ ----------- ----------- ----------- -------------
Я очень новичок в python и pandas
Итак, я ценю всю помощь, которую я могу получить
Комментарии:
1. Пожалуйста, покажите нам что-нибудь, что вы пробовали? Кроме того, целевой df выглядит странно, вы просто хотите
freqA
, чтобы в столбцах или значенияхfreqA
2. @Grayrigel Мне нужны значения freqA Я пробовал что-то подобное с набором данных временных рядов covid-19, но он был построен иначе, чем этот, пока я не написал никакого кода для этого фрейма данных
3. Я добавил ответ, дайте мне знать, работает ли он для вас.
4. Большое вам спасибо! Это сработало!
5. Рад, что смог помочь. Повезло. Счастливого кодирования !! 🙂
Ответ №1:
Работает ли это для вас:
#working with subset of your data
>>> df = pd.DataFrame({'date':['2/1/19','3/1/19','4/1/19', '5/1/19','6/1/19'], 'Category':['A','B','A','A','C'],'freqA':[2,5,10
,17,21],'freqB':[89,98,100,121,133]})
#input data
>>> df
date Category freqA freqB
0 2/1/19 A 2 89
1 3/1/19 B 5 98
2 4/1/19 A 10 100
3 5/1/19 A 17 121
4 6/1/19 C 21 133
#using pivot to reshape the dataframe and renaming the columns
>>> df1 = df.pivot(index ='date', columns='Category',values='freqA')
>>> df1.columns = [f'Category{x}' for x in df1.columns.tolist()]
>>> print(df1)
Вывод:
CategoryA CategoryB CategoryC
date
2/1/19 2.0 NaN NaN
3/1/19 NaN 5.0 NaN
4/1/19 10.0 NaN NaN
5/1/19 17.0 NaN NaN
6/1/19 NaN NaN 21.0
Вы также можете позаботиться о NaN
значениях с fillna
помощью . Вот пример:
>>> df1.fillna(method='ffill', inplace=True)
>>> df1.fillna(method='bfill', inplace=True)
CategoryA CategoryB CategoryC
date
2/1/19 2.0 5.0 21.0
3/1/19 2.0 5.0 21.0
4/1/19 10.0 5.0 21.0
5/1/19 17.0 5.0 21.0
6/1/19 17.0 5.0 21.0