我无法在给定参考日期的情况下获取python中变量的最后一个,倒数第二个和倒数第二个月值。我 我有两个数据帧:
id_cliente | |
---|---|
201504 | A8781 |
201706 | B7638 |
201401 | A8781 |
首先按id_cliente
df1['reference_date']
过滤df2['date']
后的行,按Series.map
比较按Series.gt
大,并在boolean indexing
中过滤,然后按DataFrame.sort_values
排序以获得正确的顺序:
s = df1.set_index('id_cliente')['reference_date']
df = (df2[df2['id_client'].map(s).gt(df2['date'])]
.sort_values(['id_client','date'], ascending=[True, False]))
然后按计数器GroupBy.cumcount
为过滤器 3 行创建帮助器列,也用于按DataFrame.pivot
进行透视:
df['g'] = df.groupby('id_client').cumcount()
df = df[df['g'].lt(3)].copy()
df = df.pivot('id_client','g','sales')
最后设置新列名,通过映射添加reference_date
并将索引转换为列:
df.columns = ['last_date','penultimate_date','antepenultimate_date']
df = df.reset_index()
df.insert(0,'reference_date', df['id_client'].map(s))
print (df)
reference_date id_client last_date penultimate_date antepenultimate_date
0 201504 A8781 3200 6500 3400
1 201706 B7638 100 200 300
编辑:多个id_cliente
的类似答案 - 而不是map
DataFrame.merge
使用,并且用于区分重复的id_cliente
GroupBy.cumcount
:
df1['groups'] = df1.groupby('id_cliente').cumcount()
df = df2.merge(df1, left_on='id_client', right_on='id_cliente')
df = (df[df['reference_date'].gt(df['date'])]
.sort_values(['groups','id_client','date'], ascending=[True, True, False])
)
df['g'] = df.groupby(['id_client','groups']).cumcount()
df = df[df['g'].lt(3)].copy()
df = df.pivot(['groups','id_client'],'g','sales')
print (df)
df.columns = ['last_date','penultimate_date','antepenultimate_date']
df = df1.join(df, on=['groups','id_cliente']).drop('groups', axis=1)
print (df)
reference_date id_cliente last_date penultimate_date
0 201504 A8781 3200 6500
1 201706 B7638 100 200
2 201401 A8781 3 2
antepenultimate_date
0 3400
1 300
2 1
假设示例中数据帧的结构 - 聚合date
列上的第二个数据帧,然后选择第 n 个条目。您可以将.groupby.nth()
与.pivot()
一起使用,以执行此任务。
n_obs = 3 # number of observations per item
grouped = df2[['id_client', 'sales']].groupby('id_client').nth(list(range(n_obs))
# Reformat the table to desired shape for last 3 values, change
grouped.assign(row_num=grouped.index%n_obs).pivot(
index='id_client', columns='row_num', values='sales').rename_axis(
'', axis=1).reset_index().rename(
columns={0:'last', 1:'penulltimate', 2:'antepenultimate'})
输出:
id_client last penulltimate antepenultimate
0 A8781 3200 6500 3400
1 B7638 300 200 100
现在,您可以将其合并到id_client字段上的原始数据帧中。
参考: 分组按第 n 个
相关内容
- 没有找到相关文章
最新更新
- 我可以在共享媒体目录DCIM或Android的下载目录下编程创建空子目录吗?
- 错误:太多的重新渲染.React限制了渲染的次数,以防止无限循环.带有嵌套函数的自定义钩子
- (Python 3.8)如何将变量转换为没有分隔符的列表?
- 解决Docker层缓存在Azure Pipeline中不工作的问题
- Jetpack compose:可以设置下拉菜单的高度,以显示下一个项目
- 如何平嵌套的可观察对象,从RXJS
- 为什么我的解决方案不正确的旅游切片练习?
- 我如何使用sbt命令,如清洁和编译在我的自定义sbtplugin
- Angular语言 - 根据给定的数据自动填充嵌套表单
- node-gyp configure将错误:在VisualStudioFinder中生成EPERM
- Spring WebClient检索封装在results属性下的json对象
- 尝试设置BlazorMonaco编辑器时"ReferenceError: monaco is not defined"
- Pandas以正确的顺序创建一个列的DataFrame
- 在clojure中,vector前面的quote是什么意思?
- 在模板前使用隐式转换
- r语言 - 为什么我的生存曲线没有显示为分层分类?
- 触发通过外部记录创建API提交脚本之前/之后
- 为什么esp8266客户端没有连接到服务器?
- react-native-map-clustering的性能问题
- 如何在Flutter中设置图像选择器中的图像的最大大小
- dotenv:命令在nestjs项目中找不到
- 测试苗条的动态部件
- urllib.error.HTTPError:HTTP错误403:禁止使用urllib.requests
- 无法写入日志目录- symfony 5
- 写JSON例如persondata的正确方法是什么?
- Django Password Expiry
- 如何使用python为XML文件中的现有文本添加XML元素
- 是可能的,如果是这样,是否有一个性能优势,结合最小的API和经典控制器?
- 如何从本地存储中删除一个多维数组的按钮点击?
- 反应.Ok总是正确的,即使是故意使用错误的国家
热门标签:
javascript python java c# php android html jquery c++ css ios sql mysql arrays asp.net json python-3.x ruby-on-rails .net sql-server django objective-c excel regex ruby linux ajax iphone xml vba spring asp.net-mvc database wordpress string postgresql wpf windows xcode bash git oracle list vb.net multithreading eclipse algorithm macos powershell visual-studio image forms numpy scala function api selenium