处理大型系列的速度更快

时间:2017-11-01 07:26:32

标签: python pandas

我有三个400k +行系列名为mask,replacement和id。 Mask是一个包含我想要进行操作的所有索引。例如,如果它被打印,它看起来像

Int64Index([76,114,154,207,209])

替换系列看起来像这样

76    2015-09-25
114   2016-02-15
154   2015-09-23
207   2015-10-20
209   2015-12-13

Id系列看起来像这样

76     A
114    B
154    C
207    D
209    E

我有一个日期框架,df_members看起来像这样

     id   expire_date
0    A    2015-09-25
1    B    2016-01-15
2    C    2015-05-20
3    F    2017-02-28
4    G    2017-01-20

我想比较id系列中存在的id,在本例中为id A,B,C,如果它们不匹配,则将expire_date替换为替换Series中的日期。在这种情况下,ID为2016-02-15的行,ID为2015-09-23的行。问题是我只能想到使用for循环。这不是一种可行的方法。我能解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

首先按Link For AM Charts Website按第一个和第二个DataFrame创建Series,然后为concat创建另一个系列,最后由map或{{3}替换}:

s = pd.concat([r, ID], axis=1, keys=('new_date','id')).set_index('id')['new_date']
print (s)
id
A    2015-09-25
B    2016-02-15
C    2015-09-23
D    2015-10-20
E    2015-12-13
Name: new_date, dtype: object

df['expire_date'] = df['id'].map(s).fillna(df['expire_date'])
#alternative
#df['expire_date'] = df['id'].map(s).combine_first(df['expire_date'])
print (df)
  id expire_date
0  A  2015-09-25
1  B  2016-02-15
2  C  2015-09-23
3  F  2017-02-28
4  G  2017-01-20