python - 遍历列并同时存储不同列的值
问题描述
遍历 4 列并提取值,当列购买数量和购买价格(342,21)被填充时,应该提取它然后应该检查下一行,它将再次获取购买数量和购买价格(2330,45),但是然后在检查下一行是 nan 我想提取销售数量和销售价格(110,56)
I Have the below Dataframe
I wanted to extract values of 4 columns row by row
Quantity bought=342,21
Date=20.3.2019
Quantity Bought=2330,45
Date=21.3.2019
then it will fetch the other columns value
Quantity Sold=110,56
Date=22.3.2019
then again extracted are
Quantity Sold=221,21
Date=24.3.2019
then
Quantity Bought=344,22
Date=25.5.2019
then
Quantity Sold=455,29
29.6.2019
Quantity Sold=566,30
Date=30.6.2019
ef={'Date':['20.3.2019','21.3.2019','22.3.2019','24.3.2019','25.5.2019','29.6.2019','30.6.2019'],
'Quantity Bought':[342.0,2330.0,'nan','nan',344,'nan','nan'],
'Buy Price':[21.0,45.0,'nan','nan',22,'nan','nan'],
'Sell Quantity':['nan','nan',110,221,'nan',455,566],
'Sell Price':['nan','nan',56,21,'nan',29,30]}
ef=pd.DataFrame(ef)
#And I wanted to be added simultaneously in
el=[Trade(pd.to_datetime('20.03.2019',format='%d.%m.%Y'), 342, 21)]
el = [Trade(pd.to_datetime('21.03.2019',format='%d.%m.%Y'), 2330, 45)
el.append(Trade(pd.to_datetime('22.03.2016',format='%d.%m.%Y'), -110, 56))
el.append(Trade(pd.to_datetime('24.03.2016',format='%d.%m.%Y'), -221, 21))
el.append(Trade(pd.to_datetime('25.05.2016',format='%d.%m.%Y'), 344, 22))
el.append(Trade(pd.to_datetime('29.06.2016',format='%d.%m.%Y'), -455, 29))
el.append(Trade(pd.to_datetime('30.06.2016',format='%d.%m.%Y'), -566, 30))]
解决方案
我希望这就是你的意思:
import pandas as pd
import numpy as np
ef={'Date':['20.3.2019','21.3.2019','22.3.2019','24.3.2019','25.5.2019','29.6.2019','30.6.2019'],
'Quantity Bought':[342.0,2330.0,'nan','nan',344,'nan','nan'],
'Buy Price':[21.0,45.0,'nan','nan',22,'nan','nan'],
'Sell Quantity':['nan','nan',110,221,'nan',455,566],
'Sell Price':['nan','nan',56,21,'nan',29,30]}
ef=pd.DataFrame(ef)
ef.replace('nan', np.nan, inplace=True)
numberOfRows = len(ef.index)
el={'Date':[],
'Quantity':[],
'Price':[]}
el = pd.DataFrame(el)
row = 0
i = 0
while i < numberOfRows:
if ef.isnull().iat[row,1] != True:
adding = pd.DataFrame({"Date":[ef.iat[row,0]],
"Quantity":[ef.iat[row,1]],
"Price":[ef.iat[row,2]]})
el = el.append(adding, ignore_index=True)
i += 1
row += 1
else:
adding = pd.DataFrame({"Date": [ef.iat[row, 0]],
"Quantity": [ef.iat[row, 3]*(-1)],
"Price": [ef.iat[row, 4]]})
el = el.append(adding, ignore_index=True)
i += 1
row += 1
print(el)
推荐阅读
- java - 使用 Mockito 测试断路器 (Hystrix Javanica)
- vuejs2 - Vuejs VueFormGenerator 焦点输入字段
- asp.net - 使用 React 构建 ASP.NET Core 应用程序时,如何修复“命令“npm install”退出并显示代码 1”错误?
- javascript - Selenium,使用 Java 设置数据输入
- c# - 货币文化问题
- php - 用php中的另一个数组检查数组的单个元素
- google-play - 突然无法在 google play console 中添加应用产品(请查看下面的列表以了解问题。)
- javascript - laravel 更改路由器动态本地化
- javascript - Vuejs:仅在 quilljs 中全屏编辑器
- reactjs - 将三行合并为一种多色