小编SSM*_*SMK的帖子

使用 Pandas 替换多列中的值的优雅而有效的方法

我有一个如下所示的数据框

f = pd.DataFrame({'person_id': [101,101,101,201,201,201,203],
                  'test_id':[123,123,124,321,321,321,456],
                 'los_24':[0.3,0.7,0.6,1.01,2,1,2],
                 'los_48':[1,0.2,0.4,0.7,11,2,3],
                 'in_24':[21,24,0.3,2.3,0.8,23,1.001],
                 'in_48':[11.3,202.0,0.2,0.3,41.0,47,2],
                 'test':['A','B','C','D','E','F','G']})
Run Code Online (Sandbox Code Playgroud)

我想更换 all values less than 1 with value 1 under columns like los_24,los_48,in_24,in_48

我尝试了以下

f['los_24'] = np.where((f.los_24 < 1.0),1,f.los_24)
f['los_48'] = np.where((f.los_48 < 1.0),1,f.los_48)
f['in_24'] = np.where((f.in_24 < 1.0),1,f.in_24)
f['in_48'] = np.where((f.in_48 < 1.0),1,f.in_48)
Run Code Online (Sandbox Code Playgroud)

但是您可以看到我使用不同的列名多次编写同一行代码。

在实际数据中,我有 10 多列来替换值。那么,还有其他有效而优雅的方式来写这个吗?

我希望我的输出如下所示

在此处输入图片说明

python numpy series dataframe pandas

4
推荐指数
1
解决办法
68
查看次数

如何在Bigquery中使用Except子句?

我正在尝试使用ExceptBigquery 中的现有子句。请在下面找到我的查询

select * EXCEPT (b.hosp_id, b.person_id,c.hosp_id) from 
person a 
inner join hospital b
on a.hosp_id= b.hosp_id
inner join reading c
on a.hosp_id= c.hosp_id
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用了 3 个表。所有 3 个表都有hosp_id列,所以我想删除重复的列,即b.hosp_idc.hosp_id。同样,我也想删除b.person_id列。

当我执行上述查询时,出现如下所示的语法错误

Syntax error: Expected ")" or "," but got "." at [9:19]
Run Code Online (Sandbox Code Playgroud)

请注意,我在 inExcept子句中使用的所有列都存在于所使用的表中。附加信息是所有使用的表都是使用with子句创建的临时表。当我通过选择感兴趣的列手动执行相同操作时,它工作正常。但是我有几列,无法手动执行此操作。

你能帮我吗?我正在尝试学习 Bigquery。您的意见会有所帮助

sql google-bigquery bigquery-standard-sql python-bigquery

3
推荐指数
2
解决办法
1995
查看次数

找不到 pyenv 命令 - Jupyter 笔记本

我已经提到了这个相关的帖子

我目前在我的服务器(我没有 sudo 访问权限)中使用 jupyter 笔记本,它有python 2.7 kernel.

但是,我想添加Python >= 3.5为内核。所以,我使用的是按照教程安装Pyenv.

安装成功,我在 jupyter notebook 中收到以下消息

WARNING: seems you still have not added 'pyenv' to the load path.

# Load pyenv automatically by adding
# the following to ~/.bashrc:

export PATH="/home/abcd/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)" 
Run Code Online (Sandbox Code Playgroud)

后来,当我尝试执行以下命令时,出现如下所示的错误

!pyenv install --list | grep " 3\.[678]" 
Run Code Online (Sandbox Code Playgroud)

请注意,我在!Jupyter notebook单元格执行它时使用了符号

/bin/sh: 1: pyenv: 未找到

如何避免此错误并使 pyenv 工作并产生以下输出

在此处输入图片说明

python virtualenv pyenv jupyter jupyter-notebook

3
推荐指数
1
解决办法
6659
查看次数

使用熊猫计算简单的历史平均值

我有一个如下所示的数据框

data = pd.DataFrame({'day':['1','21','41','61','81','101','121','141','161','181','201','221'],'Sale':[1.08,0.9,0.72,0.58,0.48,0.42,0.37,0.33,0.26,0.24,0.22,0.11]})
Run Code Online (Sandbox Code Playgroud)

我想day 241通过计算所有记录的平均值来填充值,直到day 221. 同样,我想day 261通过计算所有记录的平均值直到day 241等等来计算值。

例如:day n通过取所有值的平均值来计算 的值day 1 to day n-21

我想这样做day 1001

我尝试了以下但不正确

df['day'] = df.iloc[:,1].rolling(window=all).mean()
Run Code Online (Sandbox Code Playgroud)

如何为列下的每一天创建新行day

我希望我的输出如下所示

在此处输入图片说明

python numpy time-series dataframe pandas

3
推荐指数
1
解决办法
99
查看次数

如何在单个 np.where 条件中使用多个值?

我有一个如下所示的数据框

df = pd.DataFrame({'text': ["Hi how","I am fine","Ila say Hi","hello"],
                   'tokens':["test","correct","Tim",np.nan],
                   'labels':['A','B','C','D']})
Run Code Online (Sandbox Code Playgroud)

而不是多个 np.where 条件,我想使用Oror|运算符来检查条件中的多个值,np.where如下所示

df['labels'] = np.where(df['tokens'] == ('test'|'correct'|is.na()),'new_label',df['labels'])
Run Code Online (Sandbox Code Playgroud)

但是,这会导致错误

类型错误:不支持 | 的操作数类型:'str' 和 'str'

我希望我的输出如下所示。对于具有数百万条记录的大数据,我如何有效地做到这一点?

在此处输入图片说明

python numpy series dataframe pandas

3
推荐指数
1
解决办法
47
查看次数

如何避免使用 R 加载命名空间时出错

我正在尝试使用以下命令启动一个闪亮的应用程序。

Rscript -e "shiny::runApp('test-app', launch.browser=TRUE)"
Run Code Online (Sandbox Code Playgroud)

但是,我收到如下错误

Error in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) :
  namespace 'htmltools' 0.4.0 is being loaded, but >= 0.4.0.9003 is required
Calls: :: ... getNamespace -> loadNamespace -> namespaceImport -> loadNamespace
Execution halted
Run Code Online (Sandbox Code Playgroud)

我确实检查了我的库文件夹并看到该htmltools包存在。

我也尝试过以下dependencies=TRUE

install.packages(pkgs,lib = "C:/Users/User/Desktop/data/library",repo = "https://cloud.r-project.org",dependencies=TRUE)
Run Code Online (Sandbox Code Playgroud)

这里的 pkgs 是一个包含必须安装的软件包列表的列表。

问题是相同的脚本在我的系统中工作,但在我同事的系统中不起作用。我该如何解决这个问题?

可以帮助我了解问题所在吗?

r shiny shinyapps htmltools

2
推荐指数
1
解决办法
3万
查看次数

无法使用 R 将 Inf 替换为 dplyr 链中的自定义值

我有一个如下所示的数据框

  identifier shift_back_max shift_forward_max
  <chr>               <dbl>             <dbl>
1 11                   -140                 0
2 12                    -63               149
3 13                    -37               327
4 14                      0               193
5 16                   -Inf               Inf
6 17                   -Inf               Inf
7 18                   -Inf               Inf
8 19                   -Inf               Inf
Run Code Online (Sandbox Code Playgroud)

我正在尝试替换-inf-30Inf30

我尝试了以下情况。请注意,此案例是大型 dplyr 链的一部分。但只有这一行会引发错误。所以,我在这里为一栏提供它

mutate(shift_back_max= case_when(
    (!is.na(shift_back_max)|!is.infinite(shift_back_max) ~'-30',
    TRUE ~ shift_back_max))
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误消息

Error: Problem with `mutate()` input `shift_back_max`.
x 'from' must be a finite number
i Input `shift_back_max` is `case_when(...)`.
i The error occurred …
Run Code Online (Sandbox Code Playgroud)

r dataframe lubridate dplyr tidyr

2
推荐指数
1
解决办法
953
查看次数

使用 Pandas 复制非 na 行以填充非 na 列

我有一个如下所示的数据框

df = pd.DataFrame({'person_id': [101,101,101,101],
                   'sourcename':['test1','test2','test3','test4'],
                            'Test':[np.nan,np.nan,'B5','B6']})
Run Code Online (Sandbox Code Playgroud)

我希望做的就是复制non-na从行Test列,并将其粘贴到相应的下排sourcename

当我尝试以下时,它使sourcename列的其他行成为NA

df['sourcename'] = df.loc[df['Test'].notna()]['Test']
Run Code Online (Sandbox Code Playgroud)

我希望我的输出如下所示

在此处输入图片说明

python series dataframe pandas na

2
推荐指数
1
解决办法
43
查看次数

数据框的魔法存储命令如何工作?

我分别在两个 jupyter 笔记本(N1 和 N2)中创建了两个数据帧(df1 和 df2)。

第一天,我使用下面的 store 命令在jupyter 笔记本中使用df1及其变量N2

%store -r df1
Run Code Online (Sandbox Code Playgroud)

但在第 25 天,我创建了一个新的 jupyter 笔记本N3并再次使用以下存储命令

%store -r df1
Run Code Online (Sandbox Code Playgroud)

而且它似乎很容易将数据帧的所有细节轻松地拉入jupyter笔记本df1中?N3

这是如何运作的?

它们不是仅对特定的 jupyter 笔记本会话有效吗?

那么我们是否可以只执行存储命令并随时轻松存储/检索它们,而不是将所有数据帧存储为文件?

python python-import dataframe pandas jupyter-notebook

2
推荐指数
1
解决办法
2563
查看次数

如何计算pandas中的自定义会计年度?

我有一个如下所示的数据框

app_date
20/3/2017
28/8/2017
18/10/2017
15/2/2017
2/5/2017
11/9/2016

df = pd.read_clipboard()
Run Code Online (Sandbox Code Playgroud)

我们公司的会计年度是从October当年到September明年

Q1 - Oct to Dec
Q2 - Jan to Mar
Q3 - Apr to Jun
Q4 - July - Sep  
Run Code Online (Sandbox Code Playgroud)

我正在尝试类似下面的东西

tf['app_date'] = pd.to_datetime(tf['app_date'])
tf['act_month'] = pd.DatetimeIndex(tf['app_date']).month
tf['act_year'] = pd.DatetimeIndex(tf['app_date']).year
tf['act_qtr'] = tf['app_date'].dt.to_period('Q').dt.strftime('Q%q')
tf['comp_fis_year'] = np.where(tf['act_month'] >= 9,tf['act_year']+1,tf['act_year'])
tf['comp_fis_qtr'] = tf['app_date'].dt.to_period('Q').add(1).dt.strftime('Q%q') #thanks to jezrael for this trick to get quarter
Run Code Online (Sandbox Code Playgroud)

有没有优雅且有效的方法来完成上述操作?主要是根据我们的财政年度来计算财政年度(Oct to Sep)

我希望我的输出如下所示

在此输入图像描述

python datetime numpy dataframe pandas

2
推荐指数
1
解决办法
1041
查看次数