Python 熊猫:动态计算搅动发生的位置
我有一个数据框,其中每一行是一家公司,列是每月收入,如下图所示Python 熊猫:动态计算搅动发生的位置,python,pandas,Python,Pandas,我有一个数据框,其中每一行是一家公司,列是每月收入,如下图所示 import pandas as pd from io import StringIO data=''' Company jan feb mar apr may jun jul aug sep oct nov dec CHURN Dell nan nan nan 600 550 620 nan nan 300 100 200 50 Sony 740 720
import pandas as pd
from io import StringIO
data='''
Company jan feb mar apr may jun jul aug sep oct nov dec CHURN
Dell nan nan nan 600 550 620 nan nan 300 100 200 50
Sony 740 720 780 700 250 140 20 nan nan nan nan nan
Toshiba nan nan nan nan 400 550 nan 500 nan 40 50 nan
Apple nan 300 350 300 400 500 nan nan nan nan nan nan
Acer 150 200 250 200 50 50 40 35 30 20 10 nan'''
df=pd.read_csv(StringIO(data),delimiter='\s+')
Company jan feb mar apr may jun jul aug sep oct nov dec CHURN
--------------------------------------------------------------------------------
Dell nan nan nan 600 550 620 nan nan 300 100 200 50
Sony 740 720 780 700 250 140 20 nan nan nan nan nan may
Toshiba nan nan nan nan 400 550 nan 500 nan 40 50 nan
Apple nan 300 350 300 400 500 nan nan nan nan nan nan jul
Acer 150 200 250 200 50 50 40 35 30 20 10 nan may
我需要计算这些公司(部分)的流失时间,如果他们这样做的话。我的定义如下
import pandas as pd
from io import StringIO
data='''
Company jan feb mar apr may jun jul aug sep oct nov dec CHURN
Dell nan nan nan 600 550 620 nan nan 300 100 200 50
Sony 740 720 780 700 250 140 20 nan nan nan nan nan
Toshiba nan nan nan nan 400 550 nan 500 nan 40 50 nan
Apple nan 300 350 300 400 500 nan nan nan nan nan nan
Acer 150 200 250 200 50 50 40 35 30 20 10 nan'''
df=pd.read_csv(StringIO(data),delimiter='\s+')
Company jan feb mar apr may jun jul aug sep oct nov dec CHURN
--------------------------------------------------------------------------------
Dell nan nan nan 600 550 620 nan nan 300 100 200 50
Sony 740 720 780 700 250 140 20 nan nan nan nan nan may
Toshiba nan nan nan nan 400 550 nan 500 nan 40 50 nan
Apple nan 300 350 300 400 500 nan nan nan nan nan nan jul
Acer 150 200 250 200 50 50 40 35 30 20 10 nan may
编辑:
我选择的是iloc[]
和嵌套for循环
firstrevenue=0
for row in range(0,len(df.index)-1):
for col in range(1,12):
if df.iloc[row,col].values > 0:
if firstrevenue = 0:
firstrevenue=col
但是罗曼·佩卡尔想出了更好的办法。问题已解决。不确定是否可以轻松使用,但您肯定可以使用自定义功能和: def工作者(x): ... 对于范围(1,len(x)-6)内的i: ... d=x[i:i+4] ... 如果不是d.isnull().values.any(): ... 如果x[i+4:i+6].fillna(0.max()
请提供您的任何尝试。您能提供写出的数据框吗?我已编辑。这就是你的意思吗@不是机器人对不起,我还在努力。我有一堆伪代码,但在这一点上,我没有得到比ItErrors()更多的东西。但仍在努力。@Duudsrednaz是您公司的专栏取代了索引吗?@Charles Morris不是。谢谢。我知道一定会有更好的东西,而不仅仅是在所有东西之间循环。我将研究
系列。滚动。如果更快,我会更新。