用python贴标签
嗨,鱼油们!我又来问问题了,跟上次那个问题一样,我简单的说一下这个问题。图中的原数据只有第一列,现在我想用python的pandas模块导入第一列数据(这个步骤我会),然后用一个for循环和if语句实现图中后两列的结果,并且将结果输出为像图中所示的新表。我用pandas导入数据后会形成dataframe格式,我不会将这个格式转化为整型,所以就无法用if循环。我是这样想的代码,,,乱七八糟,,,新人一个,求大佬们解答 ? 你说清楚一点,为什么-1的标签是-100,步长是51的标签是100,步长是0
为什么其他数字的标签和步长都是0,你不要告诉你的代码,你要把你的诉求说清楚,要达到什么效果 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:} 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) 我建议 还是要去多学习基础的,你现在可能连for循环的嵌套的一些用法都没用好,很多东西都是很难坐的 BIO-张磊 发表于 2020-6-8 11:57
我建议 还是要去多学习基础的,你现在可能连for循环的嵌套的一些用法都没用好,很多东西都是很难坐的
嗯嗯好滴,刚开始学,有点懵,谢谢大佬的指教,我好好学学基础~十分感谢 本帖最后由 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中运行
嗯嗯嗯!第一次见这种形式,我好好学一下,谢谢你~
页:
[1]