【问题标题】:Append Pandas Series to DataFrame as a column [duplicate]将 Pandas 系列作为列附加到 DataFrame [重复]
【发布时间】:2017-05-21 11:11:21
【问题描述】:

我有类似 ['key','col1','col2','col3'] 的 panadas 数据框 (df),并且我有 pandas 系列 (sr),其索引与数据框中的 'key' 相同.我想在名为 col4 的新列中使用相同的“键”将该系列附加到数据框中。我有以下代码:

for index, row in segmention.iterrows():    
     df[df['key']==row['key']]['col4']=sr.loc[row['key']]

代码很慢。我认为应该有更有效和更好的方法来做到这一点。你能帮忙吗?

【问题讨论】:

  • IIUC 然后df['col4'] = df['key'].map(sr) 应该可以工作
  • 发布一个具有代表性的示例和所需的输出以避免歧义对您很有用

标签: pandas series


【解决方案1】:

对于join,这确实是一个很好的用例,其中左侧数据框将列与右侧数据框/系列的索引对齐。您必须确保您的系列有一个名称才能正常工作

sr.name = 'some name'
df.join(sr, on='key')

【讨论】:

    【解决方案2】:

    使用map 提到的EdChum

    df['col4'] = df['key'].map(sr)
    print (df)
       col1  col2  col3 key  col4
    0     4     7     1   A     2
    1     5     8     3   B     4
    2     6     9     5   C     1
    

    或分配set_index:

    df = df.set_index('key')
    df['col4'] = sr
    print (df)
         col1  col2  col3  col4
    key                        
    A       4     7     1     2
    B       5     8     3     4
    C       6     9     5     1
    

    如果不需要Series 中的align 数据,key 使用(参见区别2,1,44,1,2):

    df['col4'] = sr.values
    print (df)
       col1  col2  col3 key  col4
    0     4     7     1   A     4
    1     5     8     3   B     1
    2     6     9     5   C     2
    

    示例:

    df = pd.DataFrame({'key':[1,2,3],
                       'col1':[4,5,6],
                       'col2':[7,8,9],
                       'col3':[1,3,5]}, index=list('ABC'))
    
    print (df)
       col1  col2  col3  key
    A     4     7     1    1
    B     5     8     3    2
    C     6     9     5    3
    
    sr = pd.Series([4,1,2], index=list('BCA'))
    print (sr)
    B    4
    C    1
    A    2
    dtype: int64
    
    df['col4'] = df['key'].map(sr)
    print (df)
       col1  col2  col3 key  col4
    0     4     7     1   A     2
    1     5     8     3   B     4
    2     6     9     5   C     1
    

    df = df.set_index('key')
    df['col4'] = sr
    print (df)
         col1  col2  col3  col4
    key                        
    A       4     7     1     2
    B       5     8     3     4
    C       6     9     5     1
    

    【讨论】:

    • 我认为 OP 希望基于 key 添加一个新列 'col4',例如 mapmerge
    【解决方案3】:

    你可以这样做:

    df['col4'] = sr 
    

    如果没有误会的话。

    【讨论】:

      猜你喜欢
      • 2014-12-06
      • 2020-03-04
      • 2015-03-06
      • 2018-05-06
      • 2014-05-19
      • 2018-11-08
      • 2021-08-13
      • 2021-09-03
      • 2020-10-26
      相关资源
      最近更新 更多