Python 返回每行的列名应用函数
我正在研究熊猫数据集。对于2D数据帧,尝试返回/追加一列,该列返回的列名的值超过0.95Python 返回每行的列名应用函数,python,pandas,dataframe,apply,Python,Pandas,Dataframe,Apply,我正在研究熊猫数据集。对于2D数据帧,尝试返回/追加一列,该列返回的列名的值超过0.95 import pandas as pd import numpy as np Exp_day_list = ["EXP_DAY_1","EXP_DAY_2","EXP_DAY_3","EXP_DAY_4","EXP_DAY_5","EXP_DAY_6","EXP_DAY_7","EXP_DAY_8","EXP_DAY_9","EXP_DAY_10","EXP_GT_DAY_10"] test = ra
import pandas as pd
import numpy as np
Exp_day_list = ["EXP_DAY_1","EXP_DAY_2","EXP_DAY_3","EXP_DAY_4","EXP_DAY_5","EXP_DAY_6","EXP_DAY_7","EXP_DAY_8","EXP_DAY_9","EXP_DAY_10","EXP_GT_DAY_10"]
test = raw_databased.head()
Exp_day_percentage = test[Exp_day_list]
def over_95_percent(x):
for column in x:
if x[column] > 0.95:
return column
break
Exp_day_percentage.apply(over_95_percent,axis = 1)
我测试Exp_day_百分比,结果符合我的要求
Exp_day_percentage
Out[2]:
EXP_DAY_1 EXP_DAY_2 EXP_DAY_3 EXP_DAY_4 EXP_DAY_5 EXP_DAY_6 \
0 0.0 0.0 0.52 0.94 0.94 1.0
1 0.0 0.0 0.00 0.66 1.00 1.0
2 0.0 1.0 1.00 1.00 1.00 1.0
3 0.0 0.0 0.92 1.00 1.00 1.0
4 0.0 0.0 0.95 0.97 1.00 1.0
EXP_DAY_7 EXP_DAY_8 EXP_DAY_9 EXP_DAY_10 EXP_GT_DAY_10
0 1.0 1.0 1.0 1.0 0.0
1 1.0 1.0 1.0 1.0 0.0
2 1.0 1.0 1.0 1.0 0.0
3 1.0 1.0 1.0 1.0 0.0
4 1.0 1.0 1.0 1.0 0.0
但当我对该数据帧运行apply函数时,错误函数如下所示:
TypeError: ("cannot do label indexing on <class 'pandas.indexes.base.Index'>
with these indexers [0.0] of <type 'numpy.float64'>", u'occurred at index 0')
EXP_DAY_1 EXP_DAY_2 EXP_DAY_3 EXP_DAY_4 EXP_DAY_5 EXP_DAY_6 \
0 0.0 0.0 0.52 0.94 0.94 1.0
1 0.0 0.0 0.00 0.66 1.00 1.0
2 0.0 1.0 1.00 1.00 1.00 1.0
3 0.0 0.0 0.92 1.00 1.00 1.0
4 0.0 0.0 0.95 0.97 1.00 1.0
EXP_DAY_7 EXP_DAY_8 EXP_DAY_9 EXP_DAY_10 EXP_GT_DAY_10 Column
0 1.0 1.0 1.0 1.0 0.0 EXP_DAY_5
1 1.0 1.0 1.0 1.0 0.0 EXP_DAY_5
2 1.0 1.0 1.0 1.0 0.0 EXP_DAY_2
3 1.0 1.0 1.0 1.0 0.0 EXP_DAY_4
4 1.0 1.0 1.0 1.0 0.0 EXP_DAY_3
如果有人能在这方面帮助我,我将不胜感激。我搜索了所有的互联网,却找不到类似的东西。谢谢使用
pd.DataFrame.idxmax
df.assign(Column=df.gt(.95).assign(zip5=1).idxmax(1))
EXP_DAY_1 EXP_DAY_2 EXP_DAY_3 EXP_DAY_4 EXP_DAY_5 EXP_DAY_6 EXP_DAY_7 EXP_DAY_8 EXP_DAY_9 EXP_DAY_10 EXP_GT_DAY_10 Column
0 0.0 0.0 0.52 0.94 0.94 1.0 1.0 1.0 1.0 1.0 0.0 EXP_DAY_6
1 0.0 0.0 0.00 0.66 1.00 1.0 1.0 1.0 1.0 1.0 0.0 EXP_DAY_5
2 0.0 1.0 1.00 1.00 1.00 1.0 1.0 1.0 1.0 1.0 0.0 EXP_DAY_2
3 0.0 0.0 0.92 1.00 1.00 1.0 1.0 1.0 1.0 1.0 0.0 EXP_DAY_4
4 0.0 0.0 0.95 0.97 1.00 1.0 1.0 1.0 1.0 1.0 0.0 EXP_DAY_4
非常感谢你的帮助。您如何知道gt在这种情况下会起作用?我以前看过熊猫的文档,但我不知道在哪里可以找到相关的功能?另外,你能告诉我为什么我的代码不工作吗?
pd.DataFrame.gt
是大于方法。它是df>.95
或完整事物(df>.95)的同义词。idxmax(1)
Hi,piRSquared。关于这个主题的问题。我发现如果gt返回all false,idxmax将返回所有第一列。我如何用某个常量值列表替换它。(返回第一列将使我再次清理数据。在这种情况下,您希望它返回什么?最好是参考该表中的另一列。例如,我将zip5-EXP_DAY_1 EXP_DAY_2 EXP_DAY_3 EXP_DAY_4 EXP_DAY_5 EXP_DAY_6 EXP_DAY_7 EXP_DAY_8 EXP_DAY_9 EXP_DAY_10 EXP_GT_DAY_10作为列表。如果全部为False,请返回zip5。)非常感谢。