首页 > 解决方案 > 遍历列并同时存储不同列的值

问题描述

遍历 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))]

标签: pythonpandas

解决方案


我希望这就是你的意思:

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)

推荐阅读