小编Pou*_*del的帖子

Python pandas:我们可以避免在 groupby/apply 的情况下申请吗?

我一直在听到很多关于 pandas apply 很慢的消息,应该尽可能少地使用它。

我这里有一个情况:

df = pd.DataFrame({'Date': ['2019-01-02', '2019-01-03', '2019-01-04'],
          'Fund_ID': [9072, 9072, 9072],
          'Fund_Series': ['A', 'A', 'A'],
          'Value': [1020.0, 1040.4, 1009.188],
          'Dividend': [0.0, 0.0, 52.02]})
Run Code Online (Sandbox Code Playgroud)

我想在分组后做一些调整后的加权操作,如下所示:

df['Pct_Change_Adjusted'] = df.groupby(['Fund_ID', 'Fund_Series'], as_index=False) \
                              .apply(lambda x: (x.Value + x.Dividend)/(x.Value.shift()+x.Dividend.shift())  ) \
                              .reset_index(drop=True).values[0]

print(df)

         Date  Dividend  Fund_ID Fund_Series     Value  Pct_Change_Adjusted
0  2019-01-02      0.00     9072           A  1020.000                  NaN
1  2019-01-03      0.00     9072           A  1040.400                 0.02
2  2019-01-04     52.02     9072           A  1009.188                 0.02
Run Code Online (Sandbox Code Playgroud)

有没有替代方案 apply可以提高效率或至少是第二种做事方式!!

注意:我不是在谈论 dask 和其他并行化,只谈论纯熊猫。

必需:
Pct_Change_Adjusted不使用应用的情况下计算列。

python pandas pandas-apply pandas-groupby

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

Pandas 根据索引名称突出显示行

我一直在努力解决如何根据索引名称设置突出显示熊猫行的样式。我知道如何突出显示选定的行,但是当我必须根据索引突出显示时,代码不起作用。

设置

df = pd.DataFrame({'key': list('ABCD'), 'value': range(4)})
print(df)
  key  value
0   A      0
1   B      1
2   C      2
3   D      3
Run Code Online (Sandbox Code Playgroud)

当键值为“B”或“D”时突出显示行

# this works

    df.style.apply(lambda x: ['background: lightgreen' 
                                          if (x.key == 'B' or x.key == 'D')
                                      else '' for i in x], axis=1)
Run Code Online (Sandbox Code Playgroud)

根据索引名称突出显示行

# This DOES NOT work
df1 = df.set_index('key')
df1.style.apply(lambda x: ['background: lightgreen' 
                                      if (x.index == 'B' or x.index == 'D')
                                      else '' for i in x], axis=1)
Run Code Online (Sandbox Code Playgroud)

如何根据索引名称突出显示行?

python pandas pandas-styles

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

如何在 google colab 中显示 catboost 图?

我在 google colaboratory 中使用 catboost 模块对提升分类器进行建模。我遵循了官方示例

from catboost import CatBoostClassifier, Pool

train_data = [[1, 3], [0, 4], [1, 7], [0, 3]]
train_labels = [1, 0, 1, 1]

model = CatBoostClassifier(learning_rate=0.03)

model.fit(train_data,
          train_labels,
          verbose=False,
          plot=True)

Run Code Online (Sandbox Code Playgroud)

但这在 Google Colab notebook 中没有显示任何情节。

这是我的 google colab 代码:

from catboost import CatBoostClassifier, Pool

train_data = [[1, 3], [0, 4], [1, 7], [0, 3]]
train_labels = [1, 0, 1, 1]

model = CatBoostClassifier(learning_rate=0.03)

model.fit(train_data,
          train_labels,
          verbose=False,
          plot=True)

Run Code Online (Sandbox Code Playgroud)

Google colab 只是打印,<catboost.core.CatBoostClassifier at 0x7fc7a846d898>而不是像 …

python pandas catboost google-colaboratory

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

如何在R编程中将x轴在顶部和y轴上反转?

通常,当我们绘图时,绘图的底部(从左到右)有x轴,左边有y轴(从下到上).
例如,在R编程中,我有一个这样的代码:

t <- seq(0,1,0.2)       # need t values in top x axis
plot(t,t^2,type="l")    # need t^2 values in inverted y-axis
Run Code Online (Sandbox Code Playgroud)

现在,如果我们想要绘图使得x轴在顶部(从左到右)和y轴反转(从上到下).
我们怎样才能在R编程中实现这样的壮举?我在stackoverflow中搜索了以下链接,但是它们无法满足我的要求:
如何在绘图上反转y轴

在条形图中反转y轴

plot r

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

如何在MacOS上运行八度脚本?

使用网站上的说明:http:
//wiki.octave.org/Octave_for_MacOS_X

我在MacOS X 10.9.5上安装了八度音程.已安装的应用程序位于:
/Applications/Octave-cli.app
/Applications/Octave-gui.app

现在,我有一个名为example.m的八度脚本

%file: example.m
print('hello')  
Run Code Online (Sandbox Code Playgroud)

如何从终端运行此文件?

NOTE:

    open /Applications/Octave-cli.app  # this works fine
    open /Applications/Octave-gui.app  # this freezes the octave program  
Run Code Online (Sandbox Code Playgroud)

然后我可以交互式编写和运行八度命令.

我想要的是:

octave myexample.m
Run Code Online (Sandbox Code Playgroud)

应该给出结果,如同python myscript.py给出的那样.

更新:
我卸载了:
/Applications/Octave-cli.app和/Applications/Octave-gui.app

然后,我下载了两个
带有图形用户界面(OS X 10.9+)的Octave 4.0.2 下载应用程序,
下载带命令行界面的Octave 4.0.2(OS X 10.9+)

来自网站:
http:
//wiki.octave.org/Octave_for_MacOS_X然后,我得到Octave.app,我可以在该图形界面中编写和运行八度脚本.

但是,我也想从命令行运行:

octave myexample.m
Run Code Online (Sandbox Code Playgroud)

一些相关的链接如下:
如何在unix shell中调用八度脚本

macos octave

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

熊猫在单个 iloc 操作中的前 5 行和后 5 行

我需要检查df.head()df.tail()多次。使用df.head(), df.tail()jupyter notebook 时会显示丑陋的输出。

是否有任何单行命令,以便我们只能选择前 5 行和后 5 行:

就像是:
df.iloc[:5 | -5:] ?

测试示例:

df = pd.DataFrame(np.random.rand(20,2))
df.iloc[:5]
Run Code Online (Sandbox Code Playgroud)

更新
丑陋但有效的方法:

df.iloc[(np.where( (df.index < 5) | (df.index > len(df)-5)))[0]]

or,
df.iloc[np.r_[np.arange(5), np.arange(df.shape[0]-5, df.shape[0])]]
Run Code Online (Sandbox Code Playgroud)

python pandas

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

如何在Pyspark的列中查找值最大的行名称

我有一张这样的表:

+-------+-----+------+------+
|user_id|apple|good banana|carrot|
+-------+-----+------+------+
| user_0|    0|     3|     1|
| user_1|    1|     0|     2|
| user_2|    5|     1|     2|
+-------+-----+------+------+
Run Code Online (Sandbox Code Playgroud)

在这里,对于每个水果,我想获取购买最多商品的客户列表。所需的输出如下:

                max_user max_count
apple           [user_2]         5
banana          [user_0]         3
carrot  [user_1, user_2]         2
Run Code Online (Sandbox Code Playgroud)

移动电源

+-------+-----+------+------+
|user_id|apple|good banana|carrot|
+-------+-----+------+------+
| user_0|    0|     3|     1|
| user_1|    1|     0|     2|
| user_2|    5|     1|     2|
+-------+-----+------+------+
Run Code Online (Sandbox Code Playgroud)

问题 1

如何使用 Pyspark 获得所需的输出?

问题2

如何使用 Pyspark sql 获取所需的输出?

参考

我已经做了一些研究并搜索了多个页面。到目前为止,我已经想出了一个接近的答案,但它需要转置表,这里我的表是正常的。另外,我正在学习多种方法,例如 Spark 方法和 SQL 方法。

python sql pandas apache-spark pyspark

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

Pandas 如何避免在 groupby nlargest n 中应用

Pandas apply 一般建议不要使用。我在这里遇到一种情况,我感兴趣是否有更有效的替代方案来选择 apply 。

import numpy as np
import pandas as pd

df = pd.DataFrame({'year': [1990,1990,1990,1992,1992,1992,1992,1993,1993,1993],
                   'item': list('abcdefghij'),
                  'value': [100,200,300,400,500,600,700,800,900,990]})
df
Run Code Online (Sandbox Code Playgroud)

我想获得每年的前 2 个值。

df.groupby('year')['value'].apply(lambda x: x.nlargest(2)).reset_index()
Run Code Online (Sandbox Code Playgroud)

有什么替代方案吗?任何东西,无论是更长的代码行还是其他什么!

python pandas

0
推荐指数
1
解决办法
415
查看次数

相当于 R 中的 ntile() 的 Pandas

我正在同时学习 Pandas 和 R 并想知道是否有任何方法可以在 Pandas 中进行跟踪?

y = c(3,2,2,NA,30,4)
ntile(y, n=2) # 1  1  1 NA  2  2

Pandas
y = pd.Series((3,2,2,np.nan,30,4))
??

Explanation:
From: (3,2,2,NA,30,4)
To:   1  1  1 np.nan  2  2
Logic: first three number are smaller in rank and assign rank 1
       last two values are larger so have rank 2.

**Required Output**
array([1  1 1 nan  2  2])
Run Code Online (Sandbox Code Playgroud)

python numpy r pandas

0
推荐指数
1
解决办法
1359
查看次数