- 主题:自学渣想了好久搞不定,求问
最后一行代码,出错,找不到替代的方法
import numpy as np
import pandas as pd
#from pandas import DataFrame
#赋值“A”列:
df = pd.DataFrame(np.ones(100),columns=['A'])
#赋值“B”列:
df['B'] = pd.DataFrame(np.random.randint(0,15,100))
#打印两列
print(df[['A','B']])
#定义函数
def SUM(S, N): #对序列求N天累计和,返回序列 N=0返回零
return pd.Series(S).rolling(N).sum().values if N>0 else 0
#调试出错
df.loc[:,'C'] = SUM(df['A'],df['B'])
#SUM(S, N) 函数中,参数N,要求固定值,但我需要 N 依次取 'B'列所有100个数值,求实现,谢谢。
--
FROM 211.161.241.*
B列里全是0-100随机数,应该都算是int吧?
我想把整个数列里的数据依次作为参数N,生成另一个数列
但总是报错。。。
【 在 annals 的大作中提到: 】
: 你这是希望N是int吧,那最后一行传的参数就不对呀
:
--
FROM 211.161.241.*
没看明白
【 在 hongyan2022 的大作中提到: 】
: 单就这个,试试类似于 df['A'] + df['B'] ?
--
FROM 211.161.241.*
这个能用for循环实现吗
【 在 annals 的大作中提到: 】
: 一个int,和一堆int构成的序列,那是两种东西
--
FROM 211.161.241.*
我想要的是A往前N天的累计和,N的值取自对位。
不是两列的对位和。
【 在 hongyan2022 的大作中提到: 】
: 数列或矩阵 直接 + , 是相对位置的元素的 +
--
修改:Tnnnnn FROM 211.161.241.*
FROM 211.161.241.*
自己弄了个for循环
def DDDD(S):
for i in pd.Series(S):
return i
DDDD(df['B'])
返回的只是B列的第一个值,没有循环,也不知错在哪
【 在 Tnnnnn 的大作中提到: 】
: 这个能用for循环实现吗
--
FROM 211.161.241.*
感谢感谢
【 在 hongyan2022 的大作中提到: 】
: 啊,那我要再仔细看看你的贴子,抱歉啊
--
FROM 211.161.241.*
感觉快对了,现在结果是这样的
A B C
0 1.0 14 14.0
1 1.0 8 8.0
2 1.0 0 0.0
3 1.0 11 11.0
4 1.0 0 0.0
预期的C这样的:
A B C
0 1.0 14 1.0
1 1.0 8 2.0
2 1.0 0 0.0
3 1.0 11 4.0
4 1.0 0 0.0
【 在 mof 的大作中提到: 】
: 我猜你想要的是:
: def SUM(S, N): #对序列求N天累计和,返回序列 N=0返回零
: return pd.Series(S).iloc[-N:].sum() if N>0 else 0
: ...................
--
修改:Tnnnnn FROM 211.161.241.*
FROM 211.161.241.*
太nb了,这就是我想要的,
热泪盈眶,感激涕零!
【 在 mof 的大作中提到: 】
: #增加一列,表示行数
: df['N'] = range(1, len(df)+1)
: df['C'] = df.apply(axis=1, func=lambda row: 0 if row['B']==0 else df['A'][:int(row['N'])][-int(row['B']):].sum())
: ...................
--
FROM 211.161.241.*
好的,谢谢
【 在 poggy 的大作中提到: 】
: df['C'] = [np.sum(df['A'][:s][-e:]) if e!=0 else 0 for s,e in zip(range(1,len(df)+1), df['B'])]
--
FROM 211.161.241.*