我有三个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循环。这不是一种可行的方法。我能解决这个问题吗?
答案 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