王小小子an 发表于 2020-6-6 21:08:42

用python贴标签

嗨,鱼油们!我又来问问题了,跟上次那个问题一样,我简单的说一下这个问题。图中的原数据只有第一列,现在我想用python的pandas模块导入第一列数据(这个步骤我会),然后用一个for循环和if语句实现图中后两列的结果,并且将结果输出为像图中所示的新表。我用pandas导入数据后会形成dataframe格式,我不会将这个格式转化为整型,所以就无法用if循环。我是这样想的代码,,,乱七八糟,,,新人一个,求大佬们解答

Python_Aaron 发表于 2020-6-6 21:32:20

?

BIO-张磊 发表于 2020-6-6 22:20:18

你说清楚一点,为什么-1的标签是-100,步长是5
1的标签是100,步长是0
为什么其他数字的标签和步长都是0,你不要告诉你的代码,你要把你的诉求说清楚,要达到什么效果

王小小子an 发表于 2020-6-8 10:53:33

BIO-张磊 发表于 2020-6-6 22:20
你说清楚一点,为什么-1的标签是-100,步长是5
1的标签是100,步长是0
为什么其他数字的标签和步长都是0 ...

好滴好滴,我的原始数据只有E520这一列,现在我需要在这些数据后面贴标签(标签有0,100,-100),贴标签规则如下:看E520这一列数字的正负变化,如果数字由正数变成负数(第6、7行数字由9变到-1),那就在负数-1后面标记-100;如果数字由负数变成正数(如第10、11行数字由-3变成1),那就在正数1后面标记100;其他由正数变正数,负数变负数都标记数字0。步长的计算是看标签-100和100之间的行数,拿图中的例子来说就是第7行到第11行总共有5行,步长就是5.其他的步长都是0.将得到的结果输出到“标签”和“步长”这两列。我这次应该是说明白了{:7_126:}

BIO-张磊 发表于 2020-6-8 11:56:26

import pandas as pd


data = pd.DataFrame({"E520":})
data["label"] = 0#标签列
data["step"] = 0#步值列
#print(data)

E520_len = len(data["E520"])


#先解决index列
for i in range(E520_len):
    step = 0
    for j in range(i + 1,E520_len):
      if data.iloc*data.iloc > 0:#同时为正或负
            pass
      else:
            if data.iloc > 0:
                data.iloc = 100
            else:
                data.iloc = -100
               
            i = j   
            break
            
#print(data)

#再解决step列
data_label_not0_index = data != 0].index.to_list()
#print(data_label_not0_index)
data_label_not0_index_length = len(data_label_not0_index)
data_label_not0_step = - data_label_not0_index + 1 for i in range(data_label_not0_index_length - 1)]
#print(data_label_not0_step)
count = 0
for i in data_label_not0_index[:-1]:
    data.iloc = data_label_not0_step
    count += 1

print(data)

BIO-张磊 发表于 2020-6-8 11:57:38

我建议 还是要去多学习基础的,你现在可能连for循环的嵌套的一些用法都没用好,很多东西都是很难坐的

王小小子an 发表于 2020-6-8 15:00:24

BIO-张磊 发表于 2020-6-8 11:57
我建议 还是要去多学习基础的,你现在可能连for循环的嵌套的一些用法都没用好,很多东西都是很难坐的

嗯嗯好滴,刚开始学,有点懵,谢谢大佬的指教,我好好学学基础~十分感谢

snaker 发表于 2020-6-8 17:50:30

本帖最后由 snaker 于 2020-6-8 17:56 编辑

给你个VBA版本的
Sub test()
a = 2
b = 0
Sheet1.Cells(a, 2).Value = 0
Sheet1.Cells(a, 3).Value = 0
While Sheet1.Cells(a, 1) <> 0
    If Sheet1.Cells(a, 1).Value * Sheet1.Cells(a + 1, 1).Value > 0 Then
      Sheet1.Cells(a + 1, 2).Value = 0
      Sheet1.Cells(a + 1, 3).Value = 0
    Else
      If Sheet1.Cells(a + 1, 1) Then      
            If Sheet1.Cells(a, 1).Value > Sheet1.Cells(a + 1, 1).Value Then
                Sheet1.Cells(a + 1, 2).Value = -100
            Else
                Sheet1.Cells(a + 1, 2).Value = 100
            End If      
            If b = 0 Then
                b = a
            Else
                Sheet1.Cells(b + 1, 3).Value = a - b + 1
                b = a
            End If
      End If
    End If
    a = a + 1
Wend
Sheet1.Cells(b + 1, 3).Value = 0
End Sub

可以点击按钮,或者在VBA中运行

王小小子an 发表于 2020-6-9 06:43:45

嗯嗯嗯!第一次见这种形式,我好好学一下,谢谢你~
页: [1]
查看完整版本: 用python贴标签