【问题标题】:Negate the values based on indicator根据指标否定值
【发布时间】:2019-10-09 14:15:55
【问题描述】:

当找到D 时,我想添加否定Income 的值

# Preparing data
# Note that I have clean up the `jan` to `Jan` and `Charge` to `charge`
[In]
data = [{'Month': 'Jan', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'k', 'Income': 200},
{'Month': 'Jan', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'k',  'Income': 10},
{'Month': 'Feb', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'd', 'Ex/Im': 'export', 'Income': 100},
{'Month': 'Jan', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'k', 'Income': 400},
{'Month': 'Jan', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'k',  'Income': 10},
{'Month': 'Feb', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'd', 'Ex/Im': 'export', 'Income': 200}]

[Out]   Months   Name      id   Info   d/k  Ex/Im    Income
    0   Jan    Alice sal  212  charge  k    export     200
    1   Jan    Alice sal  212  charge  k    export      10
    2   Jan    Alice sal  212  charge  d    export     100
    3   Jan    Alice sal  212  charge  k    Import     400
    4   Jan    Alice sal  212  charge  k    Import      10
    5   Jan    Alice sal  212  charge  d    Import     200

df = pd.DataFrame(data)

*注意: 我的数据框中的名字不仅是 alice sal,我的每个名字都有类似的情况

我已经试过了

# 1. Negate the values of `Income` when `D` is found, 

[In]:
df.loc[df['d/k'] == 'D', 'Income'] = -df[df['d/k'] == 'D']['Income']
print(df)

[Out]  
       Months   Name      id   Info   d/k  Ex/Im    Income
    0   Jan    Alice sal  212  charge  k    export     200
    1   Jan    Alice sal  212  charge  k    export      
    2   Jan    Alice sal  567  charge  d    export     
    3   Jan    Alice sal  212  charge  k    Import     400
    4   Jan    Alice sal  212  charge  k    Import     
    5   Jan    Alice sal  567  charge  d    Import 


# 2. Group by

[In]:
    gdf = df.groupby(['id', 'Month', 'Ex/Im', 'Info']).agg({'Income':'sum', 'Name':'first'})
print(gdf)

[Out]:
                 Income
Month           Jan
Ex/Im           export    import
Info            charge    charge
id    Name            
212   Alice sal 200         400

其他错误警告:

FutureWarning:元素比较失败;而是返回标量,但将来将执行元素比较 结果 = 方法(y)

我的预期:

                 Income
Month           Jan
Ex/Im           export    import
Info            charge    charge
id    Name            
212   Alice sal 120         210

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用条件改变值后,这只是一个枢轴问题

    df.loc[df['d/k']=='d','Income']=df.Income*-1
    
    df.pivot_table(index=['id','Name'],columns=['Months','Ex/Im','Info'],values='Income',aggfunc='sum')
    Out[423]: 
    Months          Jan       
    Ex/Im        Import export
    Info         charge charge
    id  Name                  
    212 Alicesal    210    110
    

    【讨论】:

      【解决方案2】:

      一切都是正确的,除了你的数据和否定部分:

      data = [
          {'Month': 'Jan', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'k', 'Ex/Im': 'export', 'Income': 200},
          {'Month': 'Jan', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'k', 'Ex/Im': 'export',  'Income': 10},
          {'Month': 'Jan', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'd', 'Ex/Im': 'export', 'Income': 100},
          {'Month': 'Jan', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'k', 'Ex/Im': 'Import', 'Income': 400},
          {'Month': 'Jan', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'k', 'Ex/Im': 'Import',  'Income': 10},
          {'Month': 'Jan', 'Name': 'Alice sal', 'id': 212, 'Info': 'charge', 'd/k': 'd', 'Ex/Im': 'Import', 'Income': 200}]
      
      
      • 您的数据中有 monthFeb,但表视图中的所有记录都是 Jan
      • 某些记录中缺少Ex/Im
      • 由于否定部分与D 进行比较,您应该将D 更改为d,或者将d/k 列中的值更改为D

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-02
        • 2019-06-19
        • 2021-07-28
        • 2022-07-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多