Pandas数据帧操作

时间:2014-03-13 13:26:36

标签: pandas

我有以下数据框,

df = pd.DataFrame({
'CARD_NO': [000, 001, 002, 002, 001, 111],
'request_code': [2400,2200,2400,3300,5500,6600],
'merch_id': [1, 2, 1, 3, 3, 5],
'resp_code': [0, 1, 0, 1, 1, 1]})

根据此要求,

inquiries = df[(df.request_code == 2400) & (df.merch_id == 1) & (df.resp_code == 0)]

我需要在df中标记记录,其中CARD_NO == CARD_NO,其中查询为真。
如果询问返回:

[6 rows x 4 columns]
index    CARD_NO  merch_id  request_code  resp_code
0        0         1          2400          0
2        2         1          2400          0

然后df应该是这样的:

index     CARD_NO  merch_id  request_code  resp_code    flag
0        0         1          2400          0            N
1        1         2          2200          1            N
2        2         1          2400          0            N      
3        2         3          3300          1            Y
4        1         3          5500          1            N
5      111         5          6600          1            N

我尝试了几次合并,但似乎无法获得我想要的结果。 任何帮助将不胜感激。 谢谢。

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则以下内容应该有效,即只有当CARD_NO位于已过滤的组中但行本身不在过滤组中时,您才想设置该标志。

import numpy as np
filter = (df.request_code == 2400) & (df.merch_id == 1) & (df.resp_code == 0)
df['flag']=np.where(~filter & df.CARD_NO.isin(df.ix[filter, 'CARD_NO']), 'Y', 'N')

答案 1 :(得分:0)

filtered = (df.request_code == 2400) & (df.merch_id == 1) & (df.resp_code == 0)
df["flag"] = filtered.map(lambda x: "Y" if x else "N")