Как преобразовать этот фрейм данных в следующий формат? - PullRequest
0 голосов
/ 05 июля 2018

У меня есть файл .csv, содержащий таблицу следующим образом:

lon    lat    Day1   Day2   Day3   ....
77.32  28.42  1250   850    680   
77.32  28.88  786    986    760

Учитывая конкретное значение долготы, скажем, lon = 77.32 и широта = 28.42, я хочу прочитать строку и переставить ее следующим образом:

              Albedo Values
11-11-2016      1250     
12-11-2016      850
13-11-2016      680
    . . . . . . . 
    . . . . . . .

Столбцы «День» заменены списком дат.

Справочная информация:

Я хочу дополнительно построить график на основе этих данных. В настоящее время я пытаюсь использовать следующий код для построения этих данных:

#relevant imports:
import matplotlib.pyplot as plt
import pandas as pd
import statsmodels.api as sm

#specifying lat lon value range:

l=float(28.42)
l1=float(28.43)
k=float(77.32)
k1=float(77.33)

#reading the relevant row

df=pd.read_csv(path+file, index_col=['lon','lat']).query( '@k <= lon < @k1 and @l < lat <= @l1').T
print(df)

Out:

lon      77.328125
lat      28.421875
Day1   1250.250000
Day2    804.250000
Day3    750.000000
Day4    713.875000
Day5    740.650000
Day6    840.250000
Day7    844.200000
Day8   1009.000000

^ Это тот самый фрейм данных, с которым я сейчас работаю и который является подходом к смене.

df.plot(legend=True) #plot column
plt.show()

Из:

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

1 Ответ

0 голосов
/ 05 июля 2018

Я думаю, нужно melt, а затем преобразовать столбец в datetime:

df = df.melt(['lon','lat'], var_name='date')

df['date'] = pd.to_datetime(df['date'])
print (df)
     lon    lat       date  value
0  77.32  28.42 2016-11-11   1250
1  77.32  28.88 2016-11-11    786
2  77.32  28.42 2016-12-11    850
3  77.32  28.88 2016-12-11    986
4  77.32  28.42 2016-11-13    680
5  77.32  28.88 2016-11-13    760

df.plot(x='date', y='value', legend=True) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...