【问题标题】:Map Value to Specific Row and Column - Python Pandas将值映射到特定的行和列 - Python Pandas
【发布时间】:2022-01-22 15:54:23
【问题描述】:

我有一个数据集,我想在其中匹配索引行并更改该行中列的值。

我查看了 map 和 loc 并能够使用 df.loc 定位数据,但它会过滤掉该数据,我要做的就是在找到该行时更改该行的列中的值。

什么是最好的方法 - 我的原始帖子可以在这里找到:

Original post

在 excel 中做起来很简单,但在 Pandas 中却很困难。

编辑:

到目前为止,我有这个似乎可以工作,但是在总计算之后它包含很多数字以及 dtype: int64

import pandas as pd

df = pd.read_csv(r'C:\Users\david\Documents\test.csv')

multiply = {2.1: df['Rate'] * df['Quantity']}

df['Total'] = df['Code'].map(multiply)

df.head()

我该如何解决这个问题?

【问题讨论】:

    标签: python excel pandas dataframe


    【解决方案1】:

    pandas 方法mask 在这里可能是一个不错的选择。 Mask 有两个主要参数:一个条件和用来替换满足该条件的值的东西。

    如果您尝试使用从多个数据框列中提取值的公式替换值,您还需要传入一个额外的轴参数。

    条件:例如:

    df['Code'] == 2.1
    

    替换值:这可以是单个值、系列/数据框或(对您的目的最有价值的)函数/可调用对象。例如:

    df['Rate'] * df['Quantity']
    

    :因为您传递了一个函数/可调用作为替换参数,所以您需要告诉mask() 如何找到这些值。它可能看起来像这样:

    axis=0
    

    总之,代码将如下所示:

    df['Total'] = df['Code'].mask(
        df['Code'] == 2.1,
        df['Rate'] * df['Quantity'],
        axis=0
    )
    

    【讨论】:

    • 感谢 jeff 非常感谢的帮助 - 它可以工作,但是我注意到我的 2.2 代码项也计算总数,但它没有意义 - 当它应该是 NaN 时输出 2.2
    • 我还注意到,当我将 boolean == 2.1 更改为 2.2 时,它不会影响订单项 2.2?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多