python - 使用相似维度转换行值
问题描述
我目前有一个如下所示的数据框:
Account Date Region Type Measure Value
Bob 31-Jan East A Sales 7
Bob 31-Jan West A Sales 8
Bob 31-Jan East B Expense 5
Bob 31-Jan West B Expense 10
唯一的区别是我的实际数据框有几个不同的字段用于“帐户”、“日期”和“类型”维度。
我的目标是仅将 Bob 帐户的值更改为区域之间的 50/50 分配
例如它看起来像:
Account Date Region Type Measure Value
Bob 31-Jan East A Sales 7.5
Bob 31-Jan West A Sales 7.5
Bob 31-Jan East B Expense 5
Bob 31-Jan West B Expense 10
我已经尝试在 Bob 上过滤我的 df 并开始销售:
df = df[df['Account'] == 'Bob']
df = df[df['Measure'] == 'Sales']
接下来,我使所有区域都相同:
df['Region'] = 'East and West'
到这里后,我尝试了几个 groupby 函数,但我无法让它们中的任何一个返回正确的值。
我应该尝试转置我的 df 并从那里开始工作吗?
解决方案
如果您只需要为'sales'
单个人的值执行此操作,则使用布尔索引和mean
mask = (df.Measure == 'Sales') & (df.Account == 'Bob')
df.loc[mask, 'Value'] = df.loc[mask, 'Value'].mean()
但是,如果您想对每个'sales'
帐户的度量执行此操作,则应使用+ 。groupby
transform
mask = (df.Measure == 'Sales')
df.loc[mask, 'Value'] = df[mask].groupby('Account').Value.transform('mean')
输出:
Account Date Region Type Measure Value
0 Bob 31-Jan East A Sales 7.5
1 Bob 31-Jan West A Sales 7.5
2 Bob 31-Jan East B Expense 5.0
3 Bob 31-Jan West B Expense 10.0
在最后一种情况下,您可以在分组列中添加更多列,例如,如果您想计算每个帐户在每个日期、每种类型的平均销售额。
推荐阅读
- javascript - 如何从侧边栏显示单击的项目到第一个位置,剩余的列表被隐藏并悬停显示列表
- python - 使用“时间”获取上午或下午
- wordpress - 如何在 WordPress 的作者长传中添加“阅读更多”
- filter - ublock, adblock: block elements with dynamical id
- r - R not recognizing my alternative GCC compiler after config updates?
- javascript - I want to get latitude longitude height of my mouse at the bottom of the cesium screen
- python - python Serialport写入十进制
- ruby - 与 ruby net/ssh gem 建立连接后如何进行 SSH
- apache-camel - 如何将肥皂剧保存到 apache camel 中的文件?
- xamarin - 如何在xamarin表单web视图android端传递json数据