我有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']]
代码非常慢。我认为应该有更有效和更好的方法来做到这一点。你能帮忙吗?
答案 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,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
答案 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)