将Pandas系列附加到数据框作为一列

14

我有一个名为df的pandas dataframe,其中包含 ['key','col1','col2','col3'] 列,还有一个pandas series (sr),其索引与数据框中的'key'列相同。我想将该系列附加到数据框中名为col4且具有相同'key'的新列中。我有以下代码:

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

代码运行非常缓慢。我认为应该有更高效和更好的方法来完成这个任务。你能帮忙吗?


如果我理解正确的话,df['col4'] = df['key'].map(sr) 应该可以工作。 - EdChum
1
为了避免歧义,您可以发布一个代表性的示例和所需输出,这将非常有用。 - EdChum
3个回答

17

你可以简单地执行:

df['col4'] = sr 

如果没有误解的话。


2
只有在Series没有名称或DataFrame和Series的索引相同时才能正常运行。 - Guillermo González de Garibay

8

EdChum所述,请使用map功能。

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

如果您不需要通过 keySeries 中使用 align 数据,可以使用以下方法(请参见 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”,类似于“map”或“merge”。 - EdChum

2

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接