2017-08-04 69 views
2

试图寻求一个数据帧为以下值:For循环熊猫系列,一旦真打印另一个价值

df = pd.DataFrame({'Price': [2,4,6,7,8], 
        'compare': [True, True, False, False, True]}) 

如果在“比较”的值是真的,我想打印对应的数字在'价格'列中,一旦我打印此行,我想在列'价格'之前打印一行,然后在'价格'列中打印一行。

任何想法? 我想过循环,然后试图获得这些值,但我找不到一种方法来实现它。

任何关于我可以运行并获取这些值的pd方法或函数的建议?

+0

它可以在熊猫和无环路进行相当容易。请提供一个小样本数据集和您想要的数据集 – MaxU

+0

出于某种原因,我无法上传图片。 我的最终目标是通过迭代无论一列是否为真来获得数字提供的数学计算。 如果此列中的值为真,那么另一列中的值将有助于完成计算seperatley –

+0

请阅读[如何制作良好的可重复熊猫示例](http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)并相应地编辑你的文章。 – MaxU

回答

3

IIUC:

In [42]: df.assign(prev_price=df.Price.shift(), next_price=df.Price.shift(-1)) 
Out[42]: 
    Price compare next_price prev_price 
0  2  True   4.0   NaN 
1  4  True   6.0   2.0 
2  6 False   7.0   4.0 
3  7 False   8.0   6.0 
4  8  True   NaN   7.0 

过滤:

In [43]: df.loc[df.compare].assign(prev_price=df.Price.shift(), next_price=df.Price.shift(-1)) 
Out[43]: 
    Price compare next_price prev_price 
0  2  True   4.0   NaN 
1  4  True   6.0   2.0 
4  8  True   NaN   7.0 
+0

非常感谢! –

+0

@YoavPoni,欢迎您:) – MaxU