【问题标题】:Attach values in a new column when a specific word is displayed显示特定单词时在新列中附加值
【发布时间】:2021-07-10 17:03:22
【问题描述】:

我有一个数据框 df,我想在其中创建一个基于“id”列的新列,并在出现特定字符串时附加一个值。

数据

id  place
aa  ny
bb  ny
ci  ca
ci  ca

希望

id  place   type
aa  ny      160
bb  ny      80
ci  ca      70
ci  ca      70

正在做

我正在创建一个包含这些值的字典,但是我无法将这些值附加到新列中

df.assign({'aa': '160', 'bb': '80', 'ci': '70'})

欢迎提出任何建议

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    只需映射它们:

    df['type']=df['id'].map({'aa': '160', 'bb': '80', 'ci': '70'})
    

    替换它们:

    df['type']=df['id'].replace({'aa': '160', 'bb': '80', 'ci': '70'})
    

    【讨论】:

    • 啊,好吧,我错过了附加列,让我试试。谢谢
    【解决方案2】:

    来自您的 DataFrame:

    import pandas as pd
    
    >>> df_1 = pd.DataFrame({'id': ['aa', 'bb', 'ci', 'ci'], 
    ...                      'place': ['ny', 'ny', 'ca', 'ca']}, 
    ...                     index = [0, 1, 2, 3]) 
    >>> df_1
        id  place
    0   aa  ny
    1   bb  ny
    2   ci  ca
    3   ci  ca
    

    我们可以将dict 转换为DataFrame

    >>> your_dict = {'aa': '160', 'bb': '80', 'ci': '70'}
    >>> df_2 = pd.DataFrame.from_dict(your_dict, orient='index', columns=['value']).reset_index(drop=False)
    >>> df_2
        index   value
    0   aa      160
    1   bb      80
    2   ci      70
    

    然后合并它们:

    >>> df = pd.merge(df_1,
    ...               df_2,
    ...               how='left',
    ...               left_on=['id'],
    ...               right_on=['index'])            
    >>> df.drop(['index'], axis=1)
        id  place   value
    0   aa  ny      160
    1   bb  ny      80
    2   ci  ca      70
    3   ci  ca      70
    

    【讨论】:

      猜你喜欢
      • 2020-09-19
      • 1970-01-01
      • 2017-09-10
      • 2019-12-14
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 2011-02-09
      相关资源
      最近更新 更多