我有一些DataFrame,我正尝试添加具有上一行和当前行的计算值的新列。
问题是我需要为每一行获得相同的结果(当它需要不同时)
我做了一个获取CSV的函数,将其转换为df并进行了更改。
def index_csv_update(file_path):
df = pd.read_csv(file_path)
df.drop(["Adj Close"], axis=1, inplace=True)
df.drop(["Volume"], axis=1, inplace=True)
print(df.head())
start = 0
for i, row in df.iterrows():
first_row = df.iloc[start, 4]
try:
second_row = df.iloc[start + 1, 4]
except IndexError:
second_row = 'null'
if not second_row == 'null':
df['Daily Change %'] = np.float((second_row/first_row)-1)
start += 1
df.to_csv(file_path, index=False)
打印结果:
Date Open High Low Close Daily Change %
0 2018-07-09 13.02 13.22 12.60 12.69 0.011575
1 2018-07-10 12.52 13.21 11.93 12.64 0.011575
2 2018-07-11 14.05 14.15 13.09 13.63 0.011575
3 2018-07-12 13.07 13.33 12.42 12.58 0.011575
4 2018-07-13 12.39 12.97 11.62 12.18 0.011575
在Daily Change %
列上的应该有不同的数字。
我找不到问题,
请帮助谢谢。
答案 0 :(得分:1)
您在使用时会看到
df['Daily Change %'] = np.float((second_row/first_row)-1)
您使用值..创建一个新列,您需要使用loc或iloc。
import pandas as pd
import numpy as np
df = pd.DataFrame({'foo': [1,2,3,3], 'bar': [1.2,2.3,3.5,1.3], 'foo2':[None, None, None, None]})
print(df)
start=0
for i, row in df.iterrows():
first_row = df.iloc[start, 1]
try:
second_row = df.iloc[start + 1, 1]
except IndexError:
second_row = 'null'
if not second_row == 'null':
df.iloc[start,2] = np.float((second_row/first_row)-1)
start += 1
print(df)
输出:
foo bar foo2
0 1 1.2 None
1 2 2.3 None
2 3 3.5 None
3 3 1.3 None
foo bar foo2
0 1 1.2 0.916667
1 2 2.3 0.521739
2 3 3.5 -0.628571
3 3 1.3 None