Python 循环逻辑以计算百分比更改
我的数据帧:Python 循环逻辑以计算百分比更改,python,pandas,numpy,Python,Pandas,Numpy,我的数据帧: A B C A_Q B_Q C_Q 27 40 41 2 1 etc 28 39 40 1 5 30 28 29 3 6 28 27 28 4 1 15 10 11 5 4 17 13 14 1 5 16 60 17 8 10 14 21 18 9 1 20 34
A B C A_Q B_Q C_Q
27 40 41 2 1 etc
28 39 40 1 5
30 28 29 3 6
28 27 28 4 1
15 10 11 5 4
17 13 14 1 5
16 60 17 8 10
14 21 18 9 1
20 34 23 10 2
21 45 34 7 4
我想用_Q后缀遍历每列中的每一行,从a_Q开始,并执行以下操作:
A B C A_Q B_Q C_Q A_S B_S C_S etc
27 40 41 2 1 etc
28 39 40 1 5
30 28 29 3 6
28 27 28 4 1
15 10 11 5 4
17 13 14 1 5
16 60 17 8 10 50
14 21 18 9 1
20 34 23 10 2 -25.9
21 45 34 7 4
我本想创建一个函数,然后执行类似于
df[''u S']=df.apply(function,axis=1)
的操作,但我仍然坚持执行上述步骤1-8。谢谢 是否需要将结果附加为新列?您将得到几乎为空的列,其中只有一个数据值。你能把所有的结果都加在“_Q”列的底部吗?不管怎样,我在函数中尝试了一下,来完成您要求的所有操作:
def func(col1, col2):
l = []
x = None
for index in range(0, len(col1)):
if x is None and col1[index] == 1:
x = col2[index]
l.append(0)
elif not(x is None) and col1[index] == 10:
y = col2[index]
l.append(((float(y)/x)-1)*100)
x = None
else:
l.append(0)
return l
然后将这个函数A_Q作为col1传递,A作为col2传递,它应该返回您想要的结果。对于传递函数,假设每个A、B、C列都有一个关联的_Q列,可以执行以下操作:
q = [col for col in df.columns if '_Q' in col]
for col in q:
df[col[:len(col) - 2] + '_S] = func(df[col], df[col[:len(col) - 2]
Thx JSol,我不介意附加结果。将列名重新传递给func,问题是我的df将有几十个这样的列,识别它们的唯一方法是使用_Q后缀。如何做?例如,A_Q是df中带有_Q后缀的第一个列。那么我们如何才能在A_Q中抓住_Q左边的内容,即col2值的“A”?请查看我所做的编辑。这样的事行吗?取决于列的格式,但如果它与示例完全相同,则类似于df.columns[:3]中的col,我的意思是我实际上更喜欢将结果作为新列附加,以便最终结果看起来像我文章末尾的数据帧。这样就更容易对所有数据进行目视检查。我遵循你所做的,轻推到第一个_Q列,但这不是理想的解决方案,我希望能够识别以_Q结尾的第一列,然后从那里识别相关的前一列,而不必查看数据帧,如果这有意义的话?你真的很接近!也许是那样的?它不会将追加结果作为一个新列进行修复,但这应该不会太难修复。我在这一行中遇到一个无效的语法错误:l.append(func(df[col],df[col[:len(col)-2])