如何通过在python中添加同一列的2个不同行值的值来估算特定的行值

Posted

技术标签:

【中文标题】如何通过在python中添加同一列的2个不同行值的值来估算特定的行值【英文标题】:How to impute specific row value by adding values of 2 different row values of same column in python 【发布时间】: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

【问题讨论】:

【参考方案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。

以上是关于如何通过在python中添加同一列的2个不同行值的值来估算特定的行值的主要内容,如果未能解决你的问题,请参考以下文章

解析文本文件的不同行的有效方法

如何在数据框同一列的不同行之间执行集合之间的联合

MySQL Select ID 出现在具有多个特定值的列的不同行上

如何计算2个不同行的平均值

计算不同行和列的值的差值

使用 pyspark 验证不同行中同一列的数据