Python 当为另一列指定一个条件时,如何填写正向值?

Python 当为另一列指定一个条件时,如何填写正向值?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我正在分析一张如下表。当事件列显示事务时,offer\u id列中有几个无值。仅当前一个事件是查看的报价时,我才希望通过值forward来填充None,否则,将None值填充为0或保留为None 数据帧是: df = pd.DataFrame({'event': ['offer_received', 'offer_viewed','transaction', 'transaction', 'offer_received', 'transaction'], 'user':['A','A','A',

我正在分析一张如下表。当事件列显示事务时,
offer\u id
列中有几个无值。仅当前一个事件是查看的报价时,我才希望通过值forward来填充None,否则,将None值填充为0或保留为None

数据帧是:

df = pd.DataFrame({'event': ['offer_received', 'offer_viewed','transaction', 'transaction', 'offer_received', 'transaction'], 'user':['A','A','A','A','A','A'], 'value':[0, 0, 1.09, 2.55, 0, 3.02], 'offer_id': ['0b1e1539f2cc45b7b9fa7c272da2e1d7', '0b1e1539f2cc45b7b9fa7c272da2e1d7', 'None', 'None', '3f207df678b143eea3cee63160fa8bed', 'None'], 'days':[0, 0.25, 9.75, 11, 0,9.75]})
我曾尝试使用
df.offer\u id.fillna(method='ffill')
,但我不知道在查看前一个事件
offer\u时如何在事件列中设置条件,然后使用
(method='ffill')
填充
事务的
offer\u id

我的预期结果如下:

event           user   value    offer_id                            days
offer received  A      0.00     0b1e1539f2cc45b7b9fa7c272da2e1d7    0.00
offer viewed    A      0.00     0b1e1539f2cc45b7b9fa7c272da2e1d7    0.2
transaction     A      1.09     0b1e1539f2cc45b7b9fa7c272da2e1d7    9.75                   
transaction     A      2.55     0b1e1539f2cc45b7b9fa7c272da2e1d7    11                         
offer received  A      0.00     3f207df678b143eea3cee63160fa8bed    0.00
transaction     A      3,02     None                                9.75


我想你可以用
shift()
ffill()
,和
where()

df=pd.DataFrame({'e':['r','v','t','r','t'],'oid':[1,1,np.nan,2,np.nan]})
df
#类胡萝卜素
#0 r 1.0
#1伏1.0
#2T南
#3R2.0
#4T南
df.oid=df.oid.ffill()。其中(df.e.shift()=='v',df.oid)
df
#类胡萝卜素
#0 r 1.0
#1伏1.0
#2T1.0
#3R2.0
#4T南
您甚至可以跳过
ffill()
并使用
shift()
两次:

df=pd.DataFrame({'e':['r','v','t','r','t'],'oid':[1,1,np.nan,2,np.nan]})
df.oid=df.oid.shift()。其中(df.e.shift()=='v',df.oid)
df
#类胡萝卜素
#0 r 1.0
#1伏1.0
#2T1.0
#3R2.0
#4T南

我想你可以通过
shift()
ffill()
,和
where()

df=pd.DataFrame({'e':['r','v','t','r','t'],'oid':[1,1,np.nan,2,np.nan]})
df
#类胡萝卜素
#0 r 1.0
#1伏1.0
#2T南
#3R2.0
#4T南
df.oid=df.oid.ffill()。其中(df.e.shift()=='v',df.oid)
df
#类胡萝卜素
#0 r 1.0
#1伏1.0
#2T1.0
#3R2.0
#4T南
您甚至可以跳过
ffill()
并使用
shift()
两次:

df=pd.DataFrame({'e':['r','v','t','r','t'],'oid':[1,1,np.nan,2,np.nan]})
df.oid=df.oid.shift()。其中(df.e.shift()=='v',df.oid)
df
#类胡萝卜素
#0 r 1.0
#1伏1.0
#2T1.0
#3R2.0
#4T南

Hi。你能提供MRE吗。如果人们可以复制粘贴到类似
df=pd.DataFrame({'event':['offer\u received',…
,这样他们就可以直接解决您的问题,而无需手动键入数据。干杯!当然!我已经在问题中添加了它。:)你好。你能提供一个MRE吗?如果人们可以复制粘贴到类似
df=pd.DataFrame({'event':['offer\u received',…
,这样他们就可以直接解决你的问题,而不必手动输入你的数据。干杯!当然!我在问题中添加了它。:)嘿,迈克!非常感谢你的回答。我两个都试过了。但我不知道为什么,它不起作用。“交易”相关的offer\u id列仍然显示为None…你有其他选择吗?嘿,迈克!抱歉之前的评论,它确实有效!!非常感谢!!!嘿,迈克!非常感谢你的回答。我已经尝试了这两种方法。但我不知道为什么,它不起作用。“交易”相关的offer\u id列仍然显示为None…你有其他选择吗?嘿,迈克!抱歉之前的评论,它确实有效!!非常感谢!!!
event           user   value    offer_id                            days
offer received  A      0.00     0b1e1539f2cc45b7b9fa7c272da2e1d7    0.00
offer viewed    A      0.00     0b1e1539f2cc45b7b9fa7c272da2e1d7    0.2
transaction     A      1.09     0b1e1539f2cc45b7b9fa7c272da2e1d7    9.75                   
transaction     A      2.55     0b1e1539f2cc45b7b9fa7c272da2e1d7    11                         
offer received  A      0.00     3f207df678b143eea3cee63160fa8bed    0.00
transaction     A      3,02     None                                9.75