pandas

目录

(一).groupby和.agg()

(二).reset_index

(三).dt.strftime

(五).shift(1)

(六)与操作,得到交集

(七) .unstack()

(八).dt.year.astype()

(九) .count()

(十) .sum()

(十一)shift的移动。

 (十二)rank排名


(一).groupby和.agg()
df51 = df5.groupby('单位名称')['用户编号'].agg(['count', 'nunique'])

Pandas教程 | 超好用的Groupby用法详解 - 知乎 (zhihu.com)

df5.groupby('单位名称') 是根据'单位名称'划分分组

df5.groupby('单位名称')['用户编号']:对所有分组都取'用户编号'这一列

.agg(['count', 'nunique']):聚合函数,是对前面的参数执行['count', 'nunique']操作

df61 = df6.groupby('单位名称')[['台区名称', '线路名称']].nunique().reset_index()

用“单位名称”进行分类,对“台区名称”和“线路名称”进行操作,去除重复的,然后加上索引。

df61 = df61.sort_values('台区名称', ascending=False)

按照“台区名称”进行降序。.sort_values()

df730 = df7.groupby(['单位名称', 'ym'])
#将单位名称和ym都相同的划分为一个组
(二).reset_index
df51 = df51.reset_index()

如何在pandas中使用set_index( )与reset_index( )设置索引 - 知乎 (zhihu.com)

这里就是给加上 索引。

(三).dt.strftime
df7['ym'] = pd.to_datetime(df7['数据日期']).dt.strftime('%Y-%m')

Python Pandas Series.dt.strftime用法及代码示例 - 纯净天空 (vimsky.com)

使用dt.strftime() 对日期进行转换

(四)set()

那set(x)和'nunique又什么区别???

df73=df730['用户编号'].apply(lambda x: set(x)).reset_index()

Python set() 函数 | 菜鸟教程 (runoob.com)

对 用户编号 这一列进行set(x),就是去重,然后添加索引

(五).shift(1)

Python学习笔记:shift函数实现数据偏移 - Hider1214 - 博客园 (cnblogs.com)

df73['上月用户'] = df73.groupby('单位名称')['用户编号'].shift(1)
#先利用单位名称和用户编号进行分组,然后,再将每个分组都向下移动1位。
# 所以2月的就会被移除,1月的就向下移动一位,保留下来。
(六)与操作,得到交集
def func(x):
    if x['上月用户'] is np.nan:
        return np.nan
    else:
        return round(len(x['用户编号'] & x['上月用户']) / len(x['用户编号']), 3)
        #(x['用户编号'] & x['上月用户']) 用户编号这一列是2月的已经去重的用户编号,
        #上月用户是 1月已经去重的用户编号。
        #所以,每个公司的第一行都是nan


df73['2月份再次低电压用户占比'] = df73.apply(func, axis=1)#计算
(七) .unstack()
df81 = df8.groupby(['单位名称', 'year'])['数据日期'].count().unstack().reset_index()

【Python_026】stack()与unstack()函数用法_unstack函数-优快云博客

stack是二维表转为一维表,unstack是二维表转为一维表。

(八).dt.year.astype()

python时间处理(三)pandas.to_datetime_python pandas to_datetime-优快云博客

转换时间

df8['数据日期'] = pd.to_datetime(df8['数据日期'])#转换成datetime格式
df8['year'] = df8['数据日期'].dt.year.astype(str) + '年'#转换成年的格式
(九) .count()

python学习之Python count()函数详解-优快云博客

count()的使用

df810 = df8.groupby(['单位名称', 'year'])['数据日期'].count()#将每年的单位的行数计数?为什么没有参数传入
df81 = df810.unstack().reset_index()#.unstack()转为二维,每个单位三年的数据,转为二维
(十) .sum()

Python中的sum函数.sum(axis = 1)_sum(axis=1)-优快云博客

.sum(),axis=0是按列相加,axis=1是按行相加

df81['总和'] = df81.iloc[:,1:].sum(axis=1)#按行相加,将三年的数据相加,得到总和
df91 = df9.groupby(['单位名称', '用户编号'])['数据日期'].count().reset_index()
# df9.groupby(['单位名称', '用户编号']) 相同的单位名称和用户编号的,
#会是一组,然后对 数据日期 进行操作,计算次数,添加索引
df91['连续出现3次及以上低电压的总户数'] = df91['数据日期'] >= 3
df92 = df91.groupby('单位名称')['连续出现3次及以上低电压的总户数'].sum().reset_index()#对每个单位这一列的数据 求和
df92 = df92.sort_values('连续出现3次及以上低电压的总户数', ascending=False)
(十一)shift的移动。

新建一列,将数据移动到对应的行,方便后续操作

df_101['前1月用户'] = df_101.groupby('单位名称')['用户编号'].shift(1)
#因为下面他要将年月固定在2022-01到2022-12,所以现在把前一个月的数据移动下来,单独作为一个列
df_101['前2月用户'] = df_101.groupby('单位名称')['用户编号'].shift(2)
df_102 = df_101[(df_101['年月'] >= '2022-01') & (df_101['年月'] <= '2022-12')]
df_102['连续三个月低电压用户'] = df_102.apply(lambda x: len(x['用户编号'] & x['前1月用户'] & x['前2月用户']), axis=1)
#计算这样的用户有多少
 (十二)rank排名

筛选出第一的,解决并列第一的问题

df_102['rank'] = df_102.groupby('年月')['连续三个月低电压用户'].rank(ascending=False, method='min')
df_103 = df_102[df_102['rank'] == 1]#将排名第一的放到新的pd里面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值