【发布时间】:2018-10-13 02:24:47
【问题描述】:
我正在尝试创建一个新的数据框列,该列充当运行变量,在某些条件下重置为零或“通过”。下面是我想要完成的一个简化示例。假设我正在尝试戒掉咖啡,并且我正在跟踪我连续几天不喝咖啡。在我忘记记录是否喝咖啡的日子里,我输入了“忘记”,并且我的计数不会受到影响。
以下是我目前的实现方式,尽管我怀疑有一种更有效的方法。
提前致谢!
import pandas as pd
Day = [1,2,3,4,5,6,7,8,9,10,11]
DrankCoffee = ['no','no','forgot','yes','no','no','no','no','no','yes','no']
df = pd.DataFrame(list(zip(Day,DrankCoffee)), columns=['Day','DrankCoffee'])
df['Streak'] = 0
s = 0
for (index,row) in df.iterrows():
if row['DrankCoffee'] == 'no':
s += 1
if row['DrankCoffee'] == 'yes':
s = 0
else:
pass
df.loc[index,'Streak'] = s
【问题讨论】:
-
您能否详细说明问题的结构?因为您似乎可以使用 iloc 并跟踪您的连续列中的最后一个 0。让我们称之为
zero_streak。如果下一个条目是yes,那么只需将zero_streak索引中的+1 添加到当前索引。如果no则将新行设置为 0 并将您的zero_streak更新为新索引
标签: python python-3.x pandas dataframe conditional-statements