【问题标题】:Pandas df append new column based on dictPandas df 基于 dict 追加新列
【发布时间】:2022-01-14 21:53:53
【问题描述】:

我试图通过使用字典在我的数据框中添加一个新列:

我的数据框如下所示:

df = pd.DataFrame({
        'Time': [1,2,3,4,5,6,7,8,9,10],
        'Code': ['A', 'C', 'X', 'Y', 'A', 'B', 'X', 'A', 'Z', 'L'],
        'Value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        })

我的 dic 看起来像这样:

dic = {(1,'A',1):"P",(2,'C',2):"O",(3,'X',3):"P",(4,'Y',4):"O",(5,'A',5):"P",(6,'B',6):"O",(7,'X',7):"P",(8,'A',8):"P",(9,'Z',9):"O",(10,'L',10):"O"}

我对如何做到这一点进行了一些研究,并提出了使用地图功能:

df['final'] = dic[df['Time',"Code","Value"].map(dic)

但它确实有效 - 不可散列的类型:“系列”..

有没有办法解决这个问题?谢谢大家

【问题讨论】:

    标签: python pandas dataframe numpy dictionary


    【解决方案1】:

    使用DataFrame.joindic 转换为Series

    df = df.join(pd.Series(dic).rename('final'), on=['Time','Code','Value'])
    print (df)
       Time Code  Value final
    0     1    A      1     P
    1     2    C      2     O
    2     3    X      3     P
    3     4    Y      4     O
    4     5    A      5     P
    5     6    B      6     O
    6     7    X      7     P
    7     8    A      8     P
    8     9    Z      9     O
    9    10    L     10     O
    

    【讨论】:

      【解决方案2】:

      代码 sn-p 应该适用于您的用例。

      import pandas as pd
      
      df = pd.DataFrame({
              'Time': [1,2,3,4,5,6,7,8,9,10],
              'Code': ['A', 'C', 'X', 'Y', 'A', 'B', 'X', 'A', 'Z', 'L'],
              'Value': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
              })
      
      dic = {(1,'A',1):"P",(2,'C',2):"O",(3,'X',3):"P",(4,'Y',4):"O",(5,'A',5):"P",(6,'B',6):"O",(7,'X',7):"P",(8,'A',8):"P",(9,'Z',9):"O",(10,'L',10):"O"}
      
      df['final'] = df.apply(lambda x: dic.get((x['Time'],x['Code'],x['Value']),''),axis=1)
      
      df
      

      输出:

         Time Code  Value final
      0     1    A      1     P
      1     2    C      2     O
      2     3    X      3     P
      3     4    Y      4     O
      4     5    A      5     P
      5     6    B      6     O
      6     7    X      7     P
      7     8    A      8     P
      8     9    Z      9     O
      9    10    L     10     O
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-08
        • 1970-01-01
        • 2018-12-25
        • 1970-01-01
        • 2016-12-21
        相关资源
        最近更新 更多