小编Mar*_*end的帖子

使用两列的groupby的第一行构造新列-Pandas

我正在尝试构造一个新列,如果这是列“ type”的元素第一次具有列“ xx”的特定值,并且在任何其他情况下都赋值为0,则该列的值为1 。

  • 我正在使用的原始数据帧(df)是:

    idx = [np.array(['Jan-18', 'Jan-18', 'Feb-18', 'Mar-18', 'Mar-18', 'Mar-18','Apr-18', 'Apr-18', 'May-18', 'Jun-18', 'Jun-18', 'Jun-18','Jul-18', 'Aug-18', 'Aug-18', 'Sep-18', 'Sep-18', 'Oct-18','Oct-18', 'Oct-18', 'Nov-18', 'Dec-18', 'Dec-18',]),np.array(['A', 'B', 'B', 'A', 'B', 'C', 'A', 'B', 'B', 'A', 'B', 'C','A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'A', 'B', 'C'])]
    data = [{'xx': 1000}, {'xx': 1000}, {'xx': 1200}, {'xx': 800}, {'xx': 800}, {'xx': 800},{'xx': 1000}, {'xx': 1000}, {'xx': 800}, {'xx': 1200}, {'xx': 1200}, {'xx': 1200},{'xx': 1000}, {'xx': 1000}, {'xx': 1000}, {'xx': 1600}, …
    Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

7
推荐指数
2
解决办法
110
查看次数

Pandas / Python - 使用 stack() groupby() 和 apply() 的性能非常慢

我正在尝试根据信息对及其以前的值在数据框中创建一个新列。虽然我运行的代码是正确的,并给出了我需要的结果,但当我在大型数据帧上运行它时速度非常慢。所以我怀疑我没有使用所有的 Python 功能来完成这项任务。在 Python 中是否有更有效、更快的方法来做到这一点?

为了让您了解上下文,让我向您解释一下我在寻找什么:

我有一个数据框,它描述了比赛结果,对于每个“日期”,您可以看到参加比赛的“类型”及其名为'xx' 的分数。

我的代码所做的是获取每个“日期”的“类型”之间的分数“xx”的差异,然后获取过去所有类型相互竞争的先前比赛结果的差异总和( 'win_comp_past_difs')。

您可以在下面看到数据和模型及其输出。

## I. DATA AND MODEL ##
Run Code Online (Sandbox Code Playgroud)

I.1. 数据

import pandas as pd
import numpy as np

idx = [np.array(['Jan-18', 'Jan-18', 'Feb-18', 'Mar-18', 'Mar-18', 'Mar-18','Mar-18', 'Mar-18', 'May-18', 'Jun-18', 'Jun-18', 'Jun-18','Jul-18', 'Aug-18', 'Aug-18', 'Sep-18', 'Sep-18', 'Oct-18','Oct-18', 'Oct-18', 'Nov-18', 'Dec-18', 'Dec-18',]),np.array(['A', 'B', 'B', 'A', 'B', 'C', 'D', 'E', 'B', 'A', 'B', 'C','A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'A', 'B', 'C'])]
data = [{'xx': 1}, …
Run Code Online (Sandbox Code Playgroud)

python performance cython pandas numba

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

用优雅的Pandas代码替换迭代

我正在尝试将我的旧学校代码更改为优雅/快速的Pandas代码,例如上一个问题:

滚动操作会降低性能以创建新列

我有4种不同的代码,我希望通过使用Pandas的简洁快速的代码来提高性能。

1)所有类型的日期均值:

原始数据帧(df)与此类似(尽管更大):

idx = [np.array(['Jan-18', 'Jan-18', 'Feb-18', 'Mar-18', 'Mar-18', 'Mar-18','Apr-18', 'Apr-18', 'May-18', 'Jun-18', 'Jun-18', 'Jun-18','Jul-18', 'Aug-18', 'Aug-18', 'Sep-18', 'Sep-18', 'Oct-18','Oct-18', 'Oct-18', 'Nov-18', 'Dec-18', 'Dec-18',]),np.array(['A', 'B', 'B', 'A', 'B', 'C', 'A', 'B', 'B', 'A', 'B', 'C','A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'A', 'B', 'C'])]
data = [{'x': 1}, {'x': 5}, {'x': 3}, {'x': 2}, {'x': 7}, {'x': 3},{'x': 1}, {'x': 6}, {'x': 3}, {'x': 5}, {'x': 2}, {'x': 3},{'x': 1}, {'x': 9}, {'x': 3}, {'x': 2}, …
Run Code Online (Sandbox Code Playgroud)

python performance numpy dataframe pandas

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

ValueError:不再支持单位“M”和“Y”,因为它们不代表明确的时间增量值持续时间

我最近将我的代码从 Python 3.3 升级到 Python 3.7,它目前抛出一个错误,内容为:

ValueError:不再支持单位“M”和“Y”,因为它们不代表明确的时间增量值持续时间

这令人费解,因为代码在升级前运行良好。

这是代码的违规部分:

df['date_modified'] = (df['date_variable']-pd.to_timedelta(df['years_variable'], unit = 'Y')).dt.date
Run Code Online (Sandbox Code Playgroud)

这是完整的代码:

import pandas as pd
import numpy as np

idx = [np.array(['Jan-18', 'Jan-18', 'Feb-18', 'Mar-18', 'Mar-18', 'Mar-18','Apr-18', 'Apr-18', 'May-18', 'Jun-18', 'Jun-18', 'Jun-18','Jul-18', 'Aug-18', 'Aug-18', 'Sep-18', 'Sep-18', 'Oct-18','Oct-18', 'Oct-18', 'Nov-18', 'Dec-18', 'Dec-18',]),np.array(['A', 'B', 'B', 'A', 'B', 'C', 'A', 'B', 'B', 'A', 'B', 'C','A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'A', 'B', 'C'])]
data = [{'years_variable': 1}, {'years_variable': 5}, {'years_variable': 3}, {'years_variable': 2}, {'years_variable': 7}, {'years_variable': …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pandas

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

标签 统计

pandas ×4

python ×4

dataframe ×2

performance ×2

cython ×1

numba ×1

numpy ×1

python-3.x ×1