我的数据帧为143999行,包含位置和时间数据。 我已经创建了一个列“dt”来计算行之间的时差。 现在我想创建一个新列,它给dt值一个组号。 所以它从group = 0开始,当dt> 60组号应增加1。 我尝试了以下方法:
def group(x):
c = 0 #
if densdata["dt"] < 60:
densdata["group"] = c
elif densdata["dt"] >= 60:
c += 1
densdata["group"] = c
densdata["group"] = densdata.apply(group, axis=1)'
我得到的错误是:The truth value of a Series is ambiguous
。
任何想法如何解决这个问题?
这就是我想要的:
dt group
0.01 0
2 0
0.05 0
300 1
2 1
60 2
答案 0 :(得分:0)
您可以利用True
评估为1并使用.cumsum()
的事实。
densdata = pd.DataFrame({'dt': np.random.randint(low=50,high=70,size=20),
'group' : np.zeros(20, dtype=np.int32)})
print(densdata.head())
dt group
0 52 0
1 59 0
2 69 0
3 55 0
4 63 0
densdata['group'] = (densdata.dt >= 60).cumsum()
print(densdata.head())
dt group
0 52 0
1 59 0
2 69 1
3 55 1
4 63 2
如果您想保证group
的第一个值为0,即使dt
的第一个值为&gt; = 60,也请使用
densdata['group'] = (densdata.dt.replace(densdata.dt[0],np.nan) >= 60).cumsum()