我目前有一个看起来像这样的数据框:
{
this.state.data.map && this.state.data.map( (item, i) => {
return(
<View>
<Text> {item.url} </Text>
<Image
style={{width: 200, height: 200}}
source={{uri: item.url}}
/>
</View>)
})
}
唯一的区别是我的实际数据框在“帐户”,“日期”和“类型”维度上有几个不同的字段。
我的目标是将 only 鲍勃的帐户的值更改为区域之间的50/50比例
例如,它看起来像:
{
this.state.data.map && this.state.data.map( (item, i) => (
<View>
<Text> {item.url} </Text>
<Image
style={{width: 200, height: 200}}
source={{uri: item.url}}
/>
</View>)
))
}
我尝试过滤Bob和销售上的df以开始:
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
接下来,我将所有区域设为相同:
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
在这里,我尝试了几个groupby函数,但是似乎无法看到它们中的任何一个来返回正确的值。
我应该尝试转置df并从那里开始工作吗?
答案 0 :(得分:3)
如果您只需要为一个人的'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
在最后一种情况下,您可以在分组列中添加更多列,例如,如果您想计算每种类型在每个日期的每个帐户的平均销售额。