目录
正确答案
首页 后端开发 Python教程 与pandas有条件合并

与pandas有条件合并

Feb 22, 2024 pm 01:07 PM

与pandas有条件合并

问题内容

我有一个 pandas 数据框,如下所示,其中详细说明了对某个区域的其他调用:

commsdate area day0 incremental day1 incremental day2 incremental
01/01/24 sales 43 36 29
01/01/24 service 85 74 66
02/01/24 sales 56 42 31
02/01/24 service 73 62 49
03/01/24 sales 48 32 24
03/01/24 service 67 58 46

我正在尝试按日期计算收到的电话数量,因此 1 月 1 日收到的销售电话将是该日期的 day0_incremental (43),1 月 2 日将是 1 月 2 日的 day0 加上 1 月 1 日的 day1 (36+) 56) 和 1 月 3 日将是 1 月 3 日的 day0 加上 1 月 2 日的 day1 加上 1 月 1 日的 day2 (48+42+29),产生以下数据框:

CallDate Sales Service
01/01/24 43 85
02/01/24 92 147
03/01/24 119 195
04/01/24 63 107
05/01/24 24 46

我已经成功地为第二个表创建了数据框的外壳,在区域列下没有值,但不知道接下来的步骤:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

df['commsdate'] = pd.to_datetime(df['commsdate'], format='%d/%m/%y')

areaunique = df['area'].unique().tolist()

from datetime import timedelta

calldate = pd.date_range(start=min(df['commsdate']), end=max(df['commsdate'])+timedelta(days=6), freq='d')

 

data = {area: [] for area in areaunique}

 

dfnew = pd.dataframe(data)

 

dfnew['calldate'] = calldate

 

dfnew = dfnew.melt(id_vars=['calldate'], var_name='area')

 

dfnew = dfnew.pivot(index='calldate', columns='area', values='value')

 

dfnew = dfnew.reset_index()

 

dfnew = dfnew[['calldate'] + areaunique]

登录后复制

我已经开始编写 for 循环,但我只做到了这一点:

1

2

for i in range(1,len(areaunique)+1):

    dfnew.columns(i) =

登录后复制


正确答案


您可以拨打pivotshiftadd

1

2

3

4

5

6

7

8

df['commsdate'] = pd.to_datetime(df['commsdate'], dayfirst=true)

tmp = df.pivot(index='commsdate', columns='area')

 

out = (tmp['day0 incremental']

       .add(tmp['day1 incremental'].shift(freq='1d'), fill_value=0)

       .add(tmp['day2 incremental'].shift(freq='2d'), fill_value=0)

       .reset_index().rename_axis(columns=none)

      )

登录后复制

或者,使用从 dayx … 字符串中提取的数字以编程方式使用 functools.reduce

1

2

3

4

5

6

7

8

9

10

11

12

from functools import reduce

import re

 

reg = re.compile(r'day(\d+)')

 

df['commsdate'] = pd.to_datetime(df['commsdate'], dayfirst=true)

tmp = df.pivot(index='commsdate', columns='area')

 

out = reduce(lambda a,b: a.add(b, fill_value=0),

             (tmp[d].shift(freq=f'{reg.search(d).group(1)}d') for d in

              tmp.columns.get_level_values(0).unique())

            ).reset_index().rename_axis(columns=none)

登录后复制

输出:

1

2

3

4

5

6

CommsDate  Sales  Service

0 2024-01-01   43.0     85.0

1 2024-01-02   92.0    147.0

2 2024-01-03  119.0    195.0

3 2024-01-04   63.0    107.0

4 2024-01-05   24.0     46.0

登录后复制

以上是与pandas有条件合并的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

我如何使用美丽的汤来解析HTML? 我如何使用美丽的汤来解析HTML? Mar 10, 2025 pm 06:54 PM

我如何使用美丽的汤来解析HTML?

python中的图像过滤 python中的图像过滤 Mar 03, 2025 am 09:44 AM

python中的图像过滤

如何使用Python查找文本文件的ZIPF分布 如何使用Python查找文本文件的ZIPF分布 Mar 05, 2025 am 09:58 AM

如何使用Python查找文本文件的ZIPF分布

如何使用Python使用PDF文档 如何使用Python使用PDF文档 Mar 02, 2025 am 09:54 AM

如何使用Python使用PDF文档

如何在django应用程序中使用redis缓存 如何在django应用程序中使用redis缓存 Mar 02, 2025 am 10:10 AM

如何在django应用程序中使用redis缓存

如何使用TensorFlow或Pytorch进行深度学习? 如何使用TensorFlow或Pytorch进行深度学习? Mar 10, 2025 pm 06:52 PM

如何使用TensorFlow或Pytorch进行深度学习?

如何在Python中实现自己的数据结构 如何在Python中实现自己的数据结构 Mar 03, 2025 am 09:28 AM

如何在Python中实现自己的数据结构

python对象的序列化和避难所化:第1部分 python对象的序列化和避难所化:第1部分 Mar 08, 2025 am 09:39 AM

python对象的序列化和避难所化:第1部分

See all articles