pandas - Pandas 选择 DataFrame 中存在相对列值的行
问题描述
假设您有一个这样的数据框:
>>> df = pd.DataFrame({
'epoch_minute': [i for i in reversed(range(25090627,25635267))],
'count': [random.randint(11, 35) for _ in range(25090627,25635267)]})
>>> df.head()
epoch_minute count
0 25635266 12
1 25635265 20
2 25635264 33
3 25635263 11
4 25635262 35
和一些像这样的相对纪元分钟增量:
day = 1440
week = 10080
month = 302400
如何完成此代码块的等效项:
for i,r in df.iterrows():
if r['epoch_minute'] - day in df['epoch_minute'].values and \
r['epoch_minute'] - week in df['epoch_minute'].values and \
r['epoch_minute'] - month in df['epoch_minute'].values:
# do stuff
使用这种语法:
valid_rows = df.loc[(df['epoch_minute'] == df['epoch_minute'] - day) &
(df['epoch_minute'] == df['epoch_minute'] - week) &
(df['epoch_minute'] == df['epoch_minute'] - month]
我理解为什么loc
选择不起作用,但我只是问是否存在一种更优雅的方法来选择有效行而不遍历数据框的行。
解决方案
添加括号和用于&
检查成员资格:bitwise AND
isin
valid_rows = df[(df['epoch_minute'].isin(df['epoch_minute'] - day)) &
(df['epoch_minute'].isin(df['epoch_minute'] - week)) &
(df['epoch_minute'].isin(df['epoch_minute'] - month))]
valid_rows = df[((df['epoch_minute'] - day).isin(df['epoch_minute'])) &
((df['epoch_minute']- week).isin(df['epoch_minute'] )) &
((df['epoch_minute'] - month).isin(df['epoch_minute']))]
推荐阅读
- git - 告诉 Git 使用几个自签名证书作为受信任的
- reactjs - 大型 react-final-form 分布在多个部分
- c++ - 在 C++ 中,如何将 uint16_t 变量传递给带有参数 unsigned int & 的函数?
- jquery - $.fn 链方法 - 调用变量
- html - 单击时引导菜单图标向上移动
- docker - 在私有管道中设置 VSTS 代理的 docker 权限
- websphere - Websphere 7.0 - 为什么 Web 服务器插件属性不可编辑
- python - Python数据框包含
- php - 使用 PHP,我怎样才能找到 [departs_at] 字段的出现次数?
- android - 打开移动数据时如何从wifi网络访问本地url?