欢迎来到RankFan的Blogs

扩大
缩小

pandas 高级

Pandas query 的用法, df.query; 12.高性能Pandas:eval和query

Dataframe Group-by, Pandas 中的 df设计思路很多;来源于SQL,毕竟SQL比pandas早好几十年出生。

df = pd.DataFrame([{'name': 'Albert', 'store': 175, 'sales': 109, 'clients': 28},
                   {'name': 'Sharon', 'store': 129, 'sales': 208, 'clients': 248},
                   {'name': 'Albert', 'store': 275, 'sales': 524, 'clients': 78},
                   {'name': 'Sharon', 'store': 399, 'sales': 913, 'clients': 921},
                   {'name': 'Sharon', 'store': 851, 'sales': 482, 'clients': 527},
                   {'name': 'Albert', 'store': 974, 'sales': 314, 'clients': 323},
                   {'name': 'Pink', 'store': 868, 'sales': 532, 'clients': 273},
                   {'name': 'Angelina', 'store': 4, 'sales': 31, 'clients': 347}],
)

df.groupby('name')[['sales', 'clients']].sum()
df.groupby('name').get_group('Albert')

df.groupby('name').first()  # each first row of each group
df.groupby('name').last()
df.groupby('name').nth(1)  # 2nd Row of each group

df.sort_values(by='sales', ascending=False, ).groupby('name').first()  # Sort and get the first value of each group

df.groupby('name').groups  # return dict
df.groupby('name').size()  # size of group(s)
df.groupby('name').ngroups  # number of group(s)

df.groupby('name').agg({'store': 'count', 'sales': 'sum', 'clients': 'mean'})
df.groupby('name').agg(['sum', 'mean'])

df.groupby('name').plot()  # plot
df.groupby('name').transform(lambda x: x.fillna(x.mean()))  # transform

Pandas进阶笔记 (一) Groupby 重难点总结 , 这篇博客写的很好,分析了applytransformfilter 怎么使用

# 等效
df_1.set_index("date").resample("M")["ext price"].sum()
df_1.groupby(pd.Grouper(key="date", freq="M"))["ext price"].sum()

# 等效
df_1.set_index("date").groupby("name")["ext price"].resample("M").sum().head(20)
df_1.groupby(["name", pd.Grouper(key="date",freq="M")])["ext price"].sum().head(20)

groupbylevel 的应用,grouping-dataframe-with-index-levels-and-columns

s.groupby(level=["first", "second"]).sum()
df.groupby([pd.Grouper(level=1), "A"]).sum()

如何去sort How To Sort Pandas DataFrames

df.sort_values(by=['colB', 'colC'], ascending=[True, False]) # 多列
df.sort_values(by='colC', ascending=True, na_position='first') # nan置顶

pandas, 微信推文pd.rolling 和 pandas 自带时间的联合应用

调用 amount.rolling() 会返回一个 Rolling 对象,再调用 Rolling 对象的 sum, max, min, mean, std 等方法即可对每个窗口求总和、最大值、最小值等等。当然我们也可以调用 agg 方法,里面传入一个函数,来自定义每个窗口的计算逻辑。然后重点是,agg 里面除了接收一个函数之外,还能接收一个列表,列表里面可以有多个函数,然后同时执行多个操作。(来源于推文

求3天内累计次数大于1k的时间,那我们根据下面 code 做一个筛选就可以啦。

amount.rolling("3D").sum()
df_assortativity.rolling(20, min_periods=1).mean()

pandas的开发者最早也是将pandas用来处理金融时间序列, 所以将日度数据转换为月度数据、季度数据都是比较常见的,或者将3列数据变成一个宽表

periods = pd.date_range(start_date, end_date, freq='Q')
pivot_nav = pd.pivot_table(fund_nav, index='day', columns='code', values='refactor_net_value')

转化成为下面数据,不存在值即为 Nan

如果想讲宽表变回去怎么做? df,stack() :DataFrame.stack

posted on 2022-03-26 18:23  RankFan  阅读(41)  评论(0编辑  收藏  举报

导航