我正在尝试构造一个新列,如果这是列“ 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 功能来完成这项任务。在 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) 我正在尝试将我的旧学校代码更改为优雅/快速的Pandas代码,例如上一个问题:
我有4种不同的代码,我希望通过使用Pandas的简洁快速的代码来提高性能。
原始数据帧(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 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)