将Pandas系列附加到DataFrame作为列[重复]

问题描述 投票:1回答:3

这个问题在这里已有答案:

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

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

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

pandas series
3个回答
0
投票

使用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

如果qazxsw poi使用qazxsw poi中不需要qazxsw poi数据(参见差异align vs Series):

key

样品:

2,1,4

4,1,2

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

如果不误解。


0
投票

对于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
© www.soinside.com 2019 - 2024. All rights reserved.