【发布时间】:2020-01-03 18:48:25
【问题描述】:
我正在尝试在 Dataframe 中创建两个新列,这些列来自使用行之间的值执行的计算。在将感兴趣的列转换为列表后,我使用 for 循环对其进行迭代。
假设以下数据框:
import pandas as pd
import numpy as np
np.random.seed(100)
my_df=pd.DataFrame(np.random.randint(10, size=(6,4)))
my_df.columns=['A', 'x', 'B','y']
my_df.index=[10,30,40,20,60,50]
以后有没有一种“熊猫”方式导致我的代码输出?
xs=np.array(my_df['x'])
diffs=[np.nan]
for i,x in enumerate(xs):
if i>0:
diffs.append(xs[i]-xs[i-1])
my_df['diffs']=diffs
ys=np.array(my_df['y'])
ratios=[]
for j,y in enumerate(ys):
if j>0 and ys[j-1]>=1.5*ys[j]:
ratios.append(True)
else:
ratios.append(False)
my_df['ratios']=ratios
print(my_df)
Output[]:
A x B y diffs ratios
10 8 8 3 7 NaN False
30 7 0 4 2 -8.0 True
40 5 2 2 2 2.0 False
20 1 0 8 4 -2.0 False
60 0 9 6 2 9.0 True
50 4 1 5 3 -8.0 False
我知道iterrows,但我没有成功。非常感谢您的意见。
此外,如果我需要将列 'x' 和 'y' 转换为这样的二维数组:[[8,7],[0,2],[2,2],[0,4],[9,2],[1,3]],你能给我一些numpy 的方向吗?
提前感谢 :-)
【问题讨论】:
标签: python-3.x pandas loops numpy