C列的数据是我手填的,是这次要帮忙的目的,怎么算出C列数据。
需求:C列的计算数据是通过A列递增和B列递减,C列递减到0后不再递减。
数据如下:
A B C # 以下描述C列需求
2 0 2 # 加A列的数值
0 1 1 # 减B列的数值
0 1 0 # 减B列的数值
0 0 0 # A列B列均为0,不计算,保持上个值
0 1 0 # C列数据为0,不减,保持C列>=0
2 0 2 # 加A列的数值
0 0 2 # A列B列均为0,不计算,保持上个值
3 0 5 # 加A列的数值
0 1 4 # 减B列的数值
0 2 2 # 减B列的数值
0 0 2 # A列B列均为0,不计算,保持上个值
已实现的方法:
import pandas as pd
d = {'A': [2, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0],
'B': [0, 1, 1, 0, 1, 0, 0, 0, 1, 2, 0],
}
df = pd.DataFrame(d)
A , C= 0, 0
l = []
for i in df.iterrows():
A,B = i[1][0], i[1][1]
C = C + A - B
C = 0 if C <= 0 else C
l.append(C)
df['C'] = pd.Series(l)
print(df)
由于数据量太大,运行要几个小时。请帮忙实现numpy 数组操作,谢谢!
你好同学,这是不太可能实现并行化处理的,但是可以减少你的python运行时间,建议不要用append函数
import pandas as pd
d = {'A': [2, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0],
'B': [0, 1, 1, 0, 1, 0, 0, 0, 1, 2, 0],
}
df = pd.DataFrame(d)
Cdf = df['A']
C = 0
for i in range(df.shape[0]):
C = C + df['A'][i] - df['B'][i]
C = 0 if C <= 0 else C
Cdf[i] = C
df['C'] = Cdf
print(df)