【发布时间】:2020-07-09 16:30:38
【问题描述】:
我有一个包含 2 列的数据框:类(0/1)和时间(整数)。我需要附加第三列,这将是获得 1 类行的剩余时间。
df = pd.DataFrame([
[1,101], [1,104],
[0,107], [0,110], [0,123],
[1,156],
[0,167]],
columns=['class', 'time'])
- 如果行的类别为 0;
diff应该是 0。 - 如果一行是 1 类;
diff应该是它的time和time之间的差异,即将出现的第一个具有类 0 的行。
我可以在 Lambda 函数中计算它:
df['diff'] = df.apply(lambda x: df[ (df['time'] >= x[1]) & (df['class']==0)]['time'].iloc[0] - x[1], axis=1)
对每一行都运行表达式df[ (df['time'] >= x[1]) & (df['class']==0)] 以获得下一行的 0 类。我认为它对于大数据帧效率不高。
什么是更有效的计算方法?
【问题讨论】:
标签: python pandas lambda pandas-apply