将Pandas Series附加到DataFrame作为列

时间:2017-01-06 16:28:25

标签: pandas series

我有panadas数据框(df),例如[' key',' col1',' col2'' col3']和我有一个pandas系列(sr),其索引与' key'相同。在数据框中。我想将系列附加到名为col4的新列的数据框中,并使用相同的键#39;。我有以下代码:

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

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

3 个答案:

答案 0 :(得分:2)

您可以这样做:

df['col4'] = sr 

如果不误解。

答案 1 :(得分:0)

如上所述[{1}}使用map

EdChum

或指定set_index

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 align使用Series时不需要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

答案 2 :(得分:0)

这对于double fac( int x ) { double result = 1.0; while ( x ) { result *= x--; } return result; } 来说确实是一个很好的用例,其中左侧数据框将列与正确的数据帧/系列的索引对齐。您必须确保您的系列具有可以使用的名称

Fn = ((1 + √5)n - (1 - √5)n) / (2n * √5)