python - 使用 Pandas/python 根据多个条件选择数据

标签 python python-3.x pandas

我有两个数据框,第一个有一个方向列,如下所示:

In [9]:wtg_data[1][['U_all', 'Dir_all']].head()
Out[9]: 
                        U_all   Dir_all
timestamp                             
2015-05-09 00:00:00  6.425383  192.7583
2015-05-09 00:10:00  6.736392  196.0836
2015-05-09 00:20:00  7.613443  203.2848
2015-05-09 00:30:00  7.539424  203.4758
2015-05-09 00:40:00  7.365549  205.2733

第二个有一组我需要排除的部分,这些部分由开始和结束角度定义,如下所示:

In [16]:wake_exclusion_zone[1][['end_angle', 'start_angle']]
Out[16]: 
     end_angle  start_angle
0          NaN          NaN
1    92.766080    37.683639
2     4.587928   296.557159
3    58.302667     6.732354
4   354.386611   305.505815
5    35.865741   324.134259
6   353.667108   313.202790
7    24.513812   335.486188
8   356.721479   321.058398
9    18.416798   341.583202
10  358.340554   325.613169
11   14.495289   342.304661

我想从第一个数据帧中选择(并保存在不同的 df 中)方向(Dir_all 列)位于第二个 df 中的对定义的任何扇区之间的数据。

目前我已经尝试了以下适用于第一部分的方法

export = wtg_data[1][(wtg_data[1]['Dir_all'] > wake_exclusion_zone[1]['start_angle'][1]) & (wtg_data[1]['Dir_all'] < wake_exclusion_zone[1]['end_angle'][1])]

但是当我尝试遍历第二个 df 并附加数据时 export df 保持不变。

最佳答案

你可以试试merge第一个数据帧 df1 的所有行和第二个数据帧 df2 的所有行,然后过滤输出:

输出没有数据,所以我更改了 df1 的第一行和第二行。

print df1
                          U_all   Dir_all
timestamp                                
2015-05-09 00:00:00  200.000000   92.7583
2015-05-09 00:00:00  200.000000   92.7583
2015-05-09 00:10:00    6.736392  196.0836
2015-05-09 00:20:00    7.613443  203.2848
2015-05-09 00:30:00    7.539424  203.4758
2015-05-09 00:40:00    7.365549  205.2733

print df2
     end_angle  start_angle
0          NaN          NaN
1    92.766080    37.683639
2     4.587928   296.557159
3    58.302667     6.732354
4   354.386611   305.505815
5    35.865741   324.134259
6   353.667108   313.202790
7    24.513812   335.486188
8   356.721479   321.058398
9    18.416798   341.583202
10  358.340554   325.613169
11   14.495289   342.304661
#helper column for join
df1['i'] = 1
df2['i'] = 1

df1 = df1.reset_index()

df = pd.merge(df1, df2, on = ['i'])
#condition
df = df[(df.Dir_all > df.start_angle) & (df.Dir_all <= df.end_angle)]
#remove helper
df = df.drop(['i'], axis=1)
print df
    timestamp  U_all  Dir_all  end_angle  start_angle
1  2015-05-09    200  92.7583   92.76608    37.683639
13 2015-05-09    200  92.7583   92.76608    37.683639

#set index from column timestamp
df = df.set_index('timestamp')
#drop duplicates
df = df.drop_duplicates(['U_all','Dir_all','end_angle', 'start_angle'])
print df
            U_all  Dir_all  end_angle  start_angle
timestamp                                         
2015-05-09    200  92.7583   92.76608    37.683639

关于python - 使用 Pandas/python 根据多个条件选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34921057/

相关文章:

python-3.x - 从字典中删除值

python - 尝试使用正则表达式捕获特定模式 (Python 3.4)

python - 使用 GroupBy 查找 DataFrame 中的最小值

python - 跳过pathlib glob中的隐藏文件和目录

python - 用列表表示 boolean 表达式

python - 连接到另一个小部件的事件

Python Pandas 多处理应用

python - 如何将两个 Pandas DataFrame 与不同的、不重叠的 MultiIndex 结合起来?

python - 请求响应中没有数据

python - 从 json 文件将嵌套数据导入 pandas