python - 将函数输出与现有列连接作为新变量

标签 python pandas datetime sas apply

我希望将 datetime/pandas 日期存储系统转换为 SAS 用于连接的存储系统一个变量。

基本上想从这里开始:

ID  date
101 20-01-01
102 21-01-01
103 22-01-01

对此:

ID DateID  date
101 10114995 20-01-01
102 10214996 21-01-01
103 10314997 22-01-01

我编写了一个函数来传递给每一行:

def SASdate(datein):
        return str(math.trunc(pd.to_timedelta(pd.to_datetime(datein) -  pd.to_datetime('1960-1-1'), unit='D') / pd.Timedelta(days=1)))

但我相信它距离优化还很远:

  1. 在我的实际数据集上运行需要很长时间。
  2. 输出似乎没有按预期连接。

例如:

str(df['ID']) + df['date'].apply([SASdate])
Out: 
                                             SASdate
0  0    101\n1    102\n2    103\nName: ID, dtype:...
1  0    101\n1    102\n2    103\nName: ID, dtype:...
2  0    101\n1    102\n2    103\nName: ID, dtype:...

我确信有一个 lambda 方法或更好的方法来连接我所缺少的这些方法,但它对我来说并不明显。

任何有关如何实现这一目标的建议将不胜感激。

下面的一些代码用于生成示例数据帧:

df = pd.DataFrame({'ID':  [101,102,103],
        'date': ['20-01-01', '21-01-01', '22-01-01']
        })

最佳答案

只需以矢量化方式在 apply 之外使用您的函数即可:

def SASdate(datein):
    origin = pd.to_datetime('1960-1-1')
    return pd.to_datetime(datein, format='%d-%m-%y').sub(origin).dt.days

df['DateID'] = df['ID'].astype(str) + SASdate(df['date']).astype(str)

输出:

>>> df
    ID      date    DateID
0  101  20-01-01  10114995
1  102  21-01-01  10214996
2  103  22-01-01  10314997

关于python - 将函数输出与现有列连接作为新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77134637/

相关文章:

python - 将 NumPy 数组转换为带有列的 Pandas Dataframe

python - 如何计算 pandas 数据框中两个或多个非零元素之间的最小间隙?

python - 通过分组对 NA 进行高性能填充

python - Pandas 在 groupby 之后对列中的特定值进行计数并放入新列中

python - 如何在 Python 中格式化持续时间(timedelta)?

Python 3.0 使用turtle.onclick

python - 如何更改子类python中的父属性

python - 访问lru_cache的缓存

javascript - 导入 csv 数据时解析带有日期的标题行

python - Pandas :选择具有特定月份和日期的所有日期