如何通过在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个不同行值的值来估算特定的行值的主要内容,如果未能解决你的问题,请参考以下文章