基于内部级别值选择数据帧中的行

2024-04-23 20:38:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我们已经尝试了各种方法来选择基于更深层索引的数据帧中的所有值。数据帧如下所示:

enter image description here

我使用以下方法创建数据帧:

# create the time list
times = []
# change start and end dates to reduce processing during testing
start = datetime(2007, 2, 1, 0, 0, 0) #start = datetime(2007, 1, 1, 0, 0, 0)
end = datetime(2007, 2, 2, 23, 59, 59) #end = datetime(2007, 12, 31, 23, 59, 59)
for dt in rrule.rrule(rrule.MINUTELY, interval=10, dtstart=start, until=end):
    times.append(dt)

# create the solar zenith angle dataframe
columns = ['lat', 'lon', 'szen']
pos = ['left', 'centre', 'right']*len(times)

times3 = [x for pair in zip(times,times,times) for x in pair]
szen_df = pd.DataFrame(index=[times3, pos], columns=columns)
szen_df.index.names = ['time', 'pos']
szen_df.name = 'subsat_sol_zen'

我需要选择“pos”级别索引为“left”的所有值。 我尝试了以下所有方法,但都没有成功:

orb_df.loc(axis=0)[(slice(None),'left'),:]
orb_df.loc[(slice(None),'left'),:]
orb_df.loc[(slice(None),'left')]
orb_df.ix('left', level='pos', axis=1)
orb_df.loc[('left', level='pos')]
orb_df.loc(axis=0)[:, 'left')]

还有更多。。。。你知道吗


Tags: 数据方法inposdffordatetimeleft
1条回答
网友
1楼 · 发布于 2024-04-23 20:38:02

试试这个。orb_df.xs('left', level='pos')

import pandas as pd
import numpy as np

np.random.seed(0)
multi_index = pd.MultiIndex.from_product([pd.date_range('2007-02-01 00:00:00', '2007-02-01 00:30:00', freq='10min'), ['left', 'center', 'right']], names=['time', 'pos'])

orb_df = pd.DataFrame(np.random.randn(12, 3), index=multi_index, columns=['lat', 'lon', 'szen'])

Out[178]: 
                               lat     lon    szen
time                pos                           
2007-02-01 00:00:00 left    1.7641  0.4002  0.9787
                    center  2.2409  1.8676 -0.9773
                    right   0.9501 -0.1514 -0.1032
2007-02-01 00:10:00 left    0.4106  0.1440  1.4543
                    center  0.7610  0.1217  0.4439
                    right   0.3337  1.4941 -0.2052
2007-02-01 00:20:00 left    0.3131 -0.8541 -2.5530
                    center  0.6536  0.8644 -0.7422
                    right   2.2698 -1.4544  0.0458
2007-02-01 00:30:00 left   -0.1872  1.5328  1.4694
                    center  0.1549  0.3782 -0.8878
                    right  -1.9808 -0.3479  0.1563

orb_df.xs('left', level='pos')

Out[179]: 
                        lat     lon    szen
time                                       
2007-02-01 00:00:00  1.7641  0.4002  0.9787
2007-02-01 00:10:00  0.4106  0.1440  1.4543
2007-02-01 00:20:00  0.3131 -0.8541 -2.5530
2007-02-01 00:30:00 -0.1872  1.5328  1.4694

使用你发给我的csv文件

import pandas as pd
import numpy as np

file_path = '/home/Jian/Downloads/test.csv'
orb_df = pd.read_csv(file_path, index_col=[0,1])

 Out[10]: 
                                 lat       lon      szen
 time                pos                                
 2007-02-01 00:00:00 left    20.3429  -31.4709  146.9311
                     centre  20.5866  -40.6835  138.3134
                     right   20.3429  -49.8961  129.6912
 2007-02-01 00:10:00 left    54.5340  -37.7192  132.4366
                     centre  55.4665  -52.7132  124.4594
                     right   54.5340  -67.7072  116.3623
 2007-02-01 00:20:00 left    77.6419 -100.0341  105.0689
                     centre  81.1240 -144.5732  100.1134
                     right   77.6419 -189.1123   95.0044
 2007-02-01 00:30:00 left    51.0248  160.1143   69.6712
                     centre  51.8437  146.3068   73.7495
                     right   51.0248  132.4994   78.1162
 2007-02-01 00:40:00 left    16.6625  144.2700   44.4155
                     centre  16.8591  135.2550   50.7311
                     right   16.6625  126.2400   57.5004
 ...                             ...       ...       ...
 2007-02-01 23:10:00 left   -75.6124   60.5806   83.4491
                     centre -78.4466   23.4148   84.4668
                     right  -75.6124  -13.7510   85.6084
 2007-02-01 23:20:00 left   -45.6521   -5.7924  114.9838
                     centre -46.3280  -18.1932  110.5555
                     right  -45.6521  -30.5941  105.7779
 2007-02-01 23:30:00 left   -11.1859  -19.3416  138.9183
                     centre -11.3158  -28.1436  132.1387
                     right  -11.1859  -36.9456  124.9512
 2007-02-01 23:40:00 left    23.6844  -26.8516  146.3563
                     centre  23.9728  -36.2861  137.7239
                     right   23.6844  -45.7205  129.0911
 2007-02-01 23:50:00 left    57.6906  -33.1493  130.0771
                     centre  58.7443  -49.4604  122.1213
                     right   57.6906  -65.7715  114.0516

 [432 rows x 3 columns]

orb_df.xs('left', level='pos')

 Out[12]: 
                          lat       lon      szen
 time                                            
 2007-02-01 00:00:00  20.3429  -31.4709  146.9311
 2007-02-01 00:10:00  54.5340  -37.7192  132.4366
 2007-02-01 00:20:00  77.6419 -100.0341  105.0689
 2007-02-01 00:30:00  51.0248  160.1143   69.6712
 2007-02-01 00:40:00  16.6625  144.2700   44.4155
 2007-02-01 00:50:00 -18.2235  136.2792   32.9172
 2007-02-01 01:00:00 -52.4325  130.0414   46.2247
 2007-02-01 01:10:00 -77.7702   83.6864   71.4977
 2007-02-01 01:20:00 -53.4182  -30.5365  108.3205
 2007-02-01 01:30:00 -19.2653  -47.6486  133.9691
 2007-02-01 01:40:00  15.6083  -55.9040  147.1195
 2007-02-01 01:50:00  50.0034  -62.1749  135.2742
 2007-02-01 02:00:00  77.4362  -94.9213  111.4778
 2007-02-01 02:10:00  55.5404  138.8276   73.4941
 2007-02-01 02:20:00  21.3963  120.3563   47.3988
 ...                      ...       ...       ...
 2007-02-01 21:30:00 -72.6257   64.6434   88.9781
 2007-02-01 21:40:00 -41.0389   16.8782  118.6125
 2007-02-01 21:50:00  -6.4433    4.7938  141.3265
 2007-02-01 22:00:00  28.3995   -2.3735  145.2392
 2007-02-01 22:10:00  62.0610   -8.8964  127.0542
 2007-02-01 22:20:00  74.2087 -118.5913   93.6189
 2007-02-01 22:30:00  43.1833  185.4045   63.0598
 2007-02-01 22:40:00   8.5652  172.6704   39.7115
 2007-02-01 22:50:00 -26.2772  165.3590   34.1985
 2007-02-01 23:00:00 -60.0139  158.9824   51.5113
 2007-02-01 23:10:00 -75.6124   60.5806   83.4491
 2007-02-01 23:20:00 -45.6521   -5.7924  114.9838
 2007-02-01 23:30:00 -11.1859  -19.3416  138.9183
 2007-02-01 23:40:00  23.6844  -26.8516  146.3563
 2007-02-01 23:50:00  57.6906  -33.1493  130.0771

 [144 rows x 3 columns]

相关问题 更多 >