我试图创建一个新的dataframe列,它充当一个正在运行的变量,在某些条件下重置为零或“passes”。下面是一个简单的例子,说明我希望完成的任务。假设我正试着戒掉喝咖啡的习惯,我正在追踪连续几天不喝咖啡的情况。在我忘记记下是否喝了咖啡的日子里,我会写“忘记”,我的记录不会受到影响。
下面是我目前是如何做到这一点的,虽然我怀疑有一种更有效的方法来实现这一点。
提前谢谢!

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

python - Python Pandas:创建充当条件运行变量的列-LMLPHP

最佳答案

您可以使用groupby.transform
对于每个streak,您需要的是这样的:

def my_func(group):
    return (group == 'no').cumsum()

您可以通过简单的比较和cumsum来划分不同的条纹
streak = (df['DrankCoffee'] == 'yes').cumsum()

0     0
1     0
2     0
3     1
4     1
5     1
6     1
7     1
8     1
9     2
10    2

then apply the transform
df['Streak'] = df.groupby(streak)['DrankCoffee'].transform(my_func)

关于python - Python Pandas:创建充当条件运行变量的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50143741/

10-09 02:47