Выполнение повторной выборки DF с несколькими индексами

#pandas

#панды #pandas

Вопрос:

У меня есть DF с ежемесячными данными A amp; B для набора имен. Как мне расширить этот DF до еженедельного DF (конец недели), используя те же данные?

 import pandas as pd
df = pd.DataFrame({
'A' : np.random.randn(6),
'B' : np.random.randn(6),
'Date' : ['2019-02-28', '2019-02-28','2019-02-28','2019-03-29','2019-03- 
29','2019-03-29'],
 'Name' :['jack','henry','phil','phil','henry','jack']  
  })
 df.set_index(['Date','Name'])
  

Ответ №1:

Сначала преобразуйте ‘Date’ в объект datetime :

 date=pd.to_datetime(df['Date'])
df['Date']=date
  

Затем установите DF с ‘Датой’ в качестве индекса :

  df=df.set_index(['Date'])
  

И используйте groupby() и resample() с помощью pad(), чтобы выполнить повторную выборку :

 df.groupby('Name').resample('W-FRI').pad()
  

это работает!

Ответ №2:

Попробуйте:

 # align Date to weekends
# if Date is already index, reset index first
df.Date = df.Date   pd.to_timedelta(6-df.Date.dt.dayofweek, unit='d')

# set_index
df.set_index(['Date', 'Name'], inplace=True)

# groupby and interpolate
# drop `interpolate()` if you want to fill the new dates with something else
df.groupby(level=1).apply(lambda x: x.reset_index(level=1)
                          .drop('Name', axis=1).asfreq('W')
                          .interpolate())
  

Вывод:

  ------- ------------ ----------- ----------- 
|       |            |     A     |     B     |
 ------- ------------ ----------- ----------- 
| name  | date       |           |           |
 ------- ------------ ----------- ----------- 
| henry | 2019-03-03 | -0.775991 | -0.370060 |
|       | 2019-03-10 | -0.583608 | 0.001735  |
|       | 2019-03-17 | -0.391225 | 0.373531  |
|       | 2019-03-24 | -0.198842 | 0.745326  |
|       | 2019-03-31 | -0.006460 | 1.117122  |
| jack  | 2019-03-03 | 0.529327  | -0.317801 |
|       | 2019-03-10 | -0.011261 | 0.336492  |
|       | 2019-03-17 | -0.551850 | 0.990785  |
|       | 2019-03-24 | -1.092438 | 1.645078  |
|       | 2019-03-31 | -1.633027 | 2.299371  |
| phil  | 2019-03-03 | 0.319571  | 0.282131  |
|       | 2019-03-10 | 0.190124  | 0.027607  |
|       | 2019-03-17 | 0.060676  | -0.226918 |
|       | 2019-03-24 | -0.068771 | -0.481442 |
|       | 2019-03-31 | -0.198218 | -0.735966 |
 ------- ------------ ----------- -----------