【问题标题】:How to impute specific row value by adding values of 2 different row values of same column in python如何通过在python中添加同一列的2个不同行值的值来估算特定的行值
【发布时间】:2021-05-05 14:26:29
【问题描述】:

我有一个如下所示的 DataFrame:

 df = {'col1': {0: 'v1',
  1: 'v2',
  2: 'v3',
  3: 'v4'},
 'col2': {0: np.nan,
  1: 13,
  2: 76,
  3: 2},
 'col3': {0: np.nan,
  1: 91,
  2: 3,
  3: 33},
 'col4': {0: np.nan,
  1: 9,
  2: 47,
  3: 62}}

我想通过添加与“val2”和“val4”相关的值来替换与 col1 的“Val1”相关的所有“nan”值,并将其归入 col2、col3 和 col4。

所以预期的输出将如下所示 -

  |    col1  col2   col3  col4
---------------------------------------
0 |   "v1"  15    124    71
1 |   "v2"  13    91     9
2 |   "v3"  76    3      47
3 |   "v4"  2     33     62

【问题讨论】:

    标签: python pandas dataframe data-manipulation data-wrangling


    【解决方案1】:

    试试loc

    import numpy as np
    import pandas as pd
    
    df = pd.DataFrame({'col1': {0: 'v1', 1: 'v2', 2: 'v3', 3: 'v4'},
                       'col2': {0: np.nan, 1: 13, 2: 76, 3: 2},
                       'col3': {0: np.nan, 1: 91, 2: 3, 3: 33},
                       'col4': {0: np.nan, 1: 9, 2: 47, 3: 62}})
    
    value_cols = ['col2', 'col3', 'col4']
    
    # Sum and Assign Data
    df.loc[df.col1.eq("v1"), value_cols] = \
        df.loc[df.col1.eq('v2') | df.col1.eq('v4'), value_cols].sum().values
    
    # Fix Types
    df[value_cols] = df[value_cols].astype(int)
    print(df)
    

    df:

      col1  col2  col3  col4
    0   v1    15   124    71
    1   v2    13    91     9
    2   v3    76     3    47
    3   v4     2    33    62
    

    【讨论】:

    • 它给了我一个错误 TypeError: unsupported operand type(s) for |: 'bool' and 'float'
    • 您是否可以运行df.to_dict() 并编辑您的问题以将数据框的一部分作为代码 来代替文本块,以用于复制该错误?跨度>
    • 我已按要求编辑了问题,看看是否有帮助!
    • 将 col1 名称从 val1 更改为 v1 后,它仍然适用于 Pandas 1.2.4。
    猜你喜欢
    • 2020-03-15
    • 1970-01-01
    • 2018-11-10
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2021-04-09
    相关资源
    最近更新 更多