这个问题在这里已有答案:
我有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']]
代码很慢。我认为应该有更有效和更好的方法来做到这一点。能否请你帮忙?
使用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
你可以简单地做:
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