【发布时间】:2019-06-25 15:08:00
【问题描述】:
鉴于Name 和Date,我有DataFrame,单元格中的权重值:
Name Jan17 Jun18 Dec18 Apr19 count
Nick 0 1.7 3.7 0 2
Jack 0 0 2.8 3.5 2
Fox 0 1.7 0 0 1
Rex 1.0 0 3.0 4.2 3
Snack 0 0 2.8 4.4 2
Yosee 0 0 0 4.3 1
Petty 0.5 1.3 2.8 3.5 4
Start 和 Finish 应该添加到 dataFrame 以引用下一个定义:
-
Start行中的第一个非零值从Jan17开始 列到Apr19 -
Finish中的第一个非零值 序列Apr19直到Jan17
另外,如果行中只有一个非零值,那么Start 和Finish 是相同的。
为了找到行中的第一个非零元素,我尝试了data[col].keys, np.argmax(),它按预期工作。
date_col_list = ['Jan17','Jun18','Dec18', 'Apr19']
data['Start']=data[date_col_list].keys([np.argmax(data[date_col_list].values!=0, axis=1)]
结果是:
Name Jan17 Jun18 Dec18 Apr19 count Start
Nick 0 1.7 3.7 0 2 Jun18
Jack 0 0 2.8 3.5 2 Dec18
Fox 0 1.7 0 0 1 Jun18
Rex 1.0 0 3.0 4.2 3 Jan18
Snack 0 0 2.8 4.4 2 Dec18
Yosee 0 0 0 4.3 1 Apr19
Petty 0.5 1.3 2.8 3.5 4 Jan17
要检测 Finish 列的值,我尝试使用:
np.apply_along_axis 为:
def func_X(i):
return np.argmax(np.where(i!=0))
np.apply_along_axis(func1d = func_X, axis=1, arr=data[date_col_list].values)
结果错误:
'tuple' object has no attribute 'argmax'
预期的数据框是:
Name Jan17 Jun18 Dec18 Apr19 count Start Finish
Nick 0 1.7 3.7 0 2 Jun18 Dec18
Jack 0 0 2.8 3.5 2 Dec18 Apr19
Fox 0 1.7 0 0 1 Jun18 Jun18
Rex 1.0 0 3.0 4.2 3 Jan18 Apr19
Snack 0 0 2.8 4.4 2 Dec18 Apr19
Yosee 0 0 0 4.3 1 Apr19 Apr19
Petty 0.5 1.3 2.8 3.5 4 Jan17 Apr19
如何在从最后一列 (Apr19) 到第一列 (Jan17) 的方向上找到非零值的 Finish?
【问题讨论】:
标签: python pandas dataframe argmax