pandas 属性错误:"float"对象没有属性"tail"

tp5buhyn  于 2023-01-24  发布在  其他
关注(0)|答案(1)|浏览(158)

我尝试在df中创建一个新的列'S',它与df的其他列一起计算,如下所示:
"E"+"I"-"D "/总和(" D ").尾部(7)/7
其中sum(D). tail(7)/7是"D"最后7个值的平均值
我试过:
df['S'] = df.apply(lambda x: (x['E'] + x['I'] -x['D']) / (sum(x['D'].tail(7))/7) if sum(x['D'].tail(7)) != 0 else np.inf, axis = 1)
我用numpy代替panda是因为当我用panda的时候它给了我inf值。
我得到了:属性错误:"float"对象没有属性"tail"

uklbhaso

uklbhaso1#

您正在对 Dataframe 列的每一行/元素(float)应用函数,因此出现错误。
IIUC你期望的输出,你可以使用numpy.where.下面,一个例子来展示你的 * 逻辑 *:

df = pd.DataFrame(np.random.rand(10, 9), columns=list("ABCDEFGHI"))
​
t = df["D"].tail(7).sum()
op1 = df["E"] + df["I"] - df["D"]
op2 = t / 7

df["S"] = np.where(t != 0, op1.div(op2), np.inf)

输出:

print(df)
​
          A         B         C  ...         H         I         S
0  0.768106  0.931050  0.118747  ...  0.055724  0.128807  0.540013
1  0.065579  0.546032  0.103620  ...  0.251604  0.181025  2.221726
2  0.839196  0.905637  0.395116  ...  0.171171  0.327523  0.074827
3  0.707141  0.015806  0.529460  ...  0.493165  0.142565  1.435263
4  0.665828  0.373126  0.305963  ...  0.166160  0.027367  1.036177
5  0.339683  0.306438  0.614405  ...  0.012405  0.057816  0.300547
6  0.916953  0.646930  0.928926  ...  0.079649  0.782347  2.924894
7  0.928679  0.587328  0.495888  ...  0.125690  0.863705  1.152783
8  0.515964  0.795475  0.898740  ...  0.984745  0.889819  2.848940
9  0.975653  0.397428  0.075647  ...  0.079495  0.559200  1.796947

[10 rows x 10 columns]

相关问题