使用类似尺寸转换行值

时间:2018-09-27 13:29:08

标签: python python-3.x pandas

我目前有一个看起来像这样的数据框:

 {
     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并从那里开始工作吗?

1 个答案:

答案 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

在最后一种情况下,您可以在分组列中添加更多列,例如,如果您想计算每种类型在每个日期的每个帐户的平均销售额。