Pandas根据同一行中的其他单元格值更改单元格值

时间:2018-01-13 15:48:01

标签: python pandas dataframe

我正在处理一个数据框,其中我的一个列需要根据行中其他列提供的一组条件和数据进行更新和更改。

有问题的行是列表价格货币。

如果它之前的列(Price Book Name)包含Amer,我希望将List Price Currency更新为USD List。如果价格手册没有说Amer,我希望将货币更新为Intl USD。否则,如果Price Book名称包含GBP,我只想将其更改为UK列表,将EUR更改为Euro List。

我尝试编写一个小的for循环来浏览每个List Price Currency并根据Price Book Name所说的更新它,但它实际上并没有对列中的单元格做任何事情。

非常感谢任何帮助或指导!

for column in datagrouped['List Price Currency']:
    if 'List Price Currency' == "USD":
        if 'Price Book Name'.str.contains("Amer"):
             'List Price Currency' == "US List"
        else: 'List Price Currency' == "Intl USD"
    if "List Price Currency" == "GBP":
             "List Price Currency" == "UK List"
    if "List Price Currency" == "EUR":
             "List Pricy Currency" == "Euro List"

1 个答案:

答案 0 :(得分:0)

如果你知道Book_Name_Price列中的所有货币,你可以使用map函数,如下所示:

    import pandas as pd

    # Create data frame
    price_book_name = ['Amer', 'I-USD', 'GBP', 'EUR', 'EUR', 'Amer' , 'GBP', 'I-USD']
    df = pd.DataFrame({'Price_Book_Name': price_book_name})

    # Create an empty column by broadcasting
    df['List_Price_Currency'] = ''

    # Create a dictionary to map onto data frame
    curr_cat = {'Amer': 'US List', 'I-USD': 'Intl USD', 'GBP': 'UK list', 'EUR': 'Euro list'}

    # Map dictionary on to List_Price_Currency
    df['List_Price_Currency'] = df['Price_Book_Name'].map(curr_cat)

    print(df)

      Price_Book_Name List_Price_Currency
    0            Amer             US List
    1           I-USD            Intl USD
    2             GBP             UK list
    3             EUR           Euro list
    4             EUR           Euro list
    5            Amer             US List
    6             GBP             UK list
    7           I-USD            Intl USD