我有一个像这样的熊猫数据框(它是一个非常大的)
date exer exp ifor mat
1092 2014-03-17 American M 528.205 2014-04-19
1093 2014-03-17 American M 528.205 2014-04-19
1094 2014-03-17 American M 528.205 2014-04-19
1095 2014-03-17 American M 528.205 2014-04-19
1096 2014-03-17 American M 528.205 2014-05-17
Run Code Online (Sandbox Code Playgroud)
现在我想逐行迭代,当我遍历每一行时,每行的值ifor
可以根据某些条件改变,我需要查找另一个数据帧.
现在,我如何在迭代时更新它.尝试了一些他们都没有工作的事情.
for i, row in df.iterrows():
if <something>:
row['ifor'] = x
else:
row['ifor'] = y
df.ix[i]['ifor'] = x
Run Code Online (Sandbox Code Playgroud)
这些方法似乎都不起作用.我没有看到数据框中的值已更新.
我一直在探索如何优化我的代码并运行pandas .at方法.根据文档
基于标签的快速标量访问器
与loc类似,at提供基于标签的标量查找.您也可以使用这些索引器进行设置.
所以我跑了一些样品:
import pandas as pd
import numpy as np
from string import letters, lowercase, uppercase
lt = list(letters)
lc = list(lowercase)
uc = list(uppercase)
def gdf(rows, cols, seed=None):
"""rows and cols are what you'd pass
to pd.MultiIndex.from_product()"""
gmi = pd.MultiIndex.from_product
df = pd.DataFrame(index=gmi(rows), columns=gmi(cols))
np.random.seed(seed)
df.iloc[:, :] = np.random.rand(*df.shape)
return df
seed = [3, 1415]
df = gdf([lc, uc], [lc, uc], seed)
print df.head().T.head().T
Run Code Online (Sandbox Code Playgroud)
df 好像:
a
A B C D E …Run Code Online (Sandbox Code Playgroud) 我是Python新手,我不知道如何解决以下问题.
我有一个功能:
def EOQ(D,p,ck,ch):
Q = math.sqrt((2*D*ck)/(ch*p))
return Q
Run Code Online (Sandbox Code Playgroud)
说我有数据帧
df = pd.DataFrame({"D": [10,20,30], "p": [20, 30, 10]})
D p
0 10 20
1 20 30
2 30 10
ch=0.2
ck=5
Run Code Online (Sandbox Code Playgroud)
而ch和ck是浮点类型.现在我想将公式应用于数据帧的每一行,并将其作为额外的行'Q'返回.一个例子(不起作用)将是:
df['Q']= map(lambda p, D: EOQ(D,p,ck,ch),df['p'], df['D'])
Run Code Online (Sandbox Code Playgroud)
(仅返回'map'类型)
在我的项目中我需要更多这种类型的处理,我希望找到有用的东西.
我有一个带时间戳温度和风速值的DataFrame,以及将它们转换成"风寒"的功能.我正在使用iterrows在每一行上运行该函数,并希望通过一个漂亮的"Wind Chill"列获得一个DataFrame.
然而,虽然它似乎正在经历,并且实际上至少已经"工作"了一次,但我似乎无法一致地复制它.我觉得这是我对DataFrames结构缺失的一般情况,但我希望有人可以提供帮助.
In [28]: bigdf.head()
Out[28]:
Day Temperature Wind Speed Year
2003-03-01 06:00:00-05:00 1 30.27 5.27 2003
2003-03-01 07:00:00-05:00 1 30.21 4.83 2003
2003-03-01 08:00:00-05:00 1 31.81 6.09 2003
2003-03-01 09:00:00-05:00 1 34.04 6.61 2003
2003-03-01 10:00:00-05:00 1 35.31 6.97 2003
Run Code Online (Sandbox Code Playgroud)
所以我添加了一个'Wind Chill'列bigdf并预填充NaN.
In [29]: bigdf['Wind Chill'] = NaN
Run Code Online (Sandbox Code Playgroud)
然后我尝试迭代行,添加实际的风寒.
In [30]: for row_index, row in bigdf[:5].iterrows():
...: row['Wind Chill'] = windchill(row['Temperature'], row['Wind Speed'])
...: print row['Wind Chill']
...:
24.7945889994
25.1365267133
25.934114012
28.2194307516
29.5051046953
Run Code Online (Sandbox Code Playgroud)
正如您所说,新值 …