这是我想用来在名为df的数据帧中迭代的列表值示例
np_checkList = np.array(['ALPHA', 'BETA', 'CHARLIE','DELTA'])
这是一个数据帧示例,我想使用np_检查表中的值对“NAME”列进行循环
df = pd.DataFrame(np.array([['ALPHA',2,'BUY'],
['BETA',5,'BUY'],
['CHARLIE',3,'BUY'],
['CHARLIE',5,'BUY'],
['DELTA',11,'BUY'],
['ALPHA', 2,'BUY'],
['CHARLIE',8,'SELL']]),
columns=['NAME','AMOUNT','TYPE'])
下面是我通过对“NAME”条件下每行的“AMOUNT”值进行累积求和而获得的最终结果。例如,如果“NAME”列的值是ALPHA,而“TYPE”是“BUY”,那么代码将对每一行进行累加
在“累计”列下,第1行的“ALPHA”值为2,第6行的“ALPHA”值为4
NAME AMOUNT TYPE ACCUMULATE
0 ALPHA 2 BUY 2
1 BETA 5 BUY 5
2 CHARLIE 3 BUY 3
3 CHARLIE 5 BUY 8
4 DELTA 11 BUY 11
5 ALPHA 2 BUY 4
6 CHARLIE 8 SELL
我用下面这组代码得到了上面的结果
我的代码往往比较冗长,这是因为我接受了来自C代码编写的老学校培训。要知道python有很多可用的API,可以用更少的行来实现结果。我有两个问题需要寻求指导,以深入探讨解决问题的各种方法
问题1:我如何将.cumsum()与'NAME'中的值一起使用键入“列”作为条件来执行“金额”值的累积和,并在“累积”列中更新它们
问题2:我在运行下面的代码后收到此警告。 我可以知道是什么原因引起的以及如何解决此警告吗
SettingWithCopyWarning:试图在数据帧切片的副本上设置值 请参阅文档中的注意事项:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy self.\u setitem\u单个块(索引器、值、名称)
df["AMOUNT"] = pd.to_numeric(df["AMOUNT"])
cumulativeValue = 0
newAccumulation = []
df['ACCUMULATE'] = ''
for name in np_checkList:
cumulativeValue = 0
for counter, row in df.iterrows():
if (row['NAME'] == name) & (row['TYPE'] == 'BUY'):
cumulativeValue = cumulativeValue + df.loc[counter]['AMOUNT']
df.ACCUMULATE.iloc[counter] = cumulativeValue
df
试试这个:
输出:
相关问题 更多 >
编程相关推荐