DemoZ2326 2020-03-24 15:02 采纳率: 100%
浏览 240
已采纳

关于pandas,python,循环问题?

希望实现这样一种效果:
从第一行开始,找到满足if条件A的某行(比如index是3),然后从index是3这行向下,找到满足if条件B的某行比如index是25,接着从index是25这行这行向下,找到满足if条件A的某行,如此循环下去。

import pandas as pd
import numpy as np

np.random.seed(20200324)
num = np.random.rand(400).round(2)
data = np.array(num).reshape(100, 4)
df = pd.DataFrame(data, columns=list('ABCD'))

temp_i = 0
for i in range(temp_i, df.shape[0]):
    if df.at[i, 'A'] > df.at[i, 'D']:
        df.at[i, 'Signal'] = 'num_up'
        for i2 in range(i+1, df.shape[0]):
            if df.at[i2, 'A'] < df.at[i2, 'D'] * 0.5:
                df.at[i2, 'Signal_2'] = 'num_down'
                temp_i = i2
                break
        break


print df

目前只能写出一次的循环,不知道是否有办法可以把现在的代码循环下去,目前我只能用野办法就是把,循环一次的复制了很多很多次,想求问各位高手这种循环怎么去写呢?

import pandas as pd
import numpy as np

np.random.seed(20200324)
num = np.random.rand(400).round(2)
data = np.array(num).reshape(100, 4)
df = pd.DataFrame(data, columns=list('ABCD'))

temp_i = 0
for i in range(temp_i, df.shape[0]):
    if df.at[i, 'A'] > df.at[i, 'D']:
        df.at[i, 'Signal'] = 'num_up'
        for i2 in range(i+1, df.shape[0]):
            if df.at[i2, 'A'] < df.at[i2, 'D'] * 0.5:
                df.at[i2, 'Signal_2'] = 'num_down'
                temp_i = i2
                break
        break

for i in range(temp_i, df.shape[0]):
    if df.at[i, 'A'] > df.at[i, 'D']:
        df.at[i, 'Signal'] = 'num_up'
        for i2 in range(i+1, df.shape[0]):
            if df.at[i2, 'A'] < df.at[i2, 'D'] * 0.5:
                df.at[i2, 'Signal_2'] = 'num_down'
                temp_i = i2
                break
        break

for i in range(temp_i, df.shape[0]):
    if df.at[i, 'A'] > df.at[i, 'D']:
        df.at[i, 'Signal'] = 'num_up'
        for i2 in range(i+1, df.shape[0]):
            if df.at[i2, 'A'] < df.at[i2, 'D'] * 0.5:
                df.at[i2, 'Signal_2'] = 'num_down'
                temp_i = i2
                break
        break



print df
  • 写回答

1条回答 默认 最新

  • 陈年椰子 2020-03-24 15:39
    关注

    按这个形式写, 应该能达到你的要求

    check_flag = 'A'
    for i in range(数据总量)
        if check_flag == 'A':
                if 满足条件A:
                        check_flag = 'B'
                            print('FIND A index', i )
                        #你要做的操作
        else:
                if 满足条件B:
                        check_flag = 'A'
                            print('FIND B index', i )
                        #你要做的操作         
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题