使用DataFrame的子集进行iterrows的最佳方法是什么?
我们采用以下简单示例:
import pandas as pd
df = pd.DataFrame({
'Product': list('AAAABBAA'),
'Quantity': [5,2,5,10,1,5,2,3],
'Start' : [
DT.datetime(2013,1,1,9,0),
DT.datetime(2013,1,1,8,5),
DT.datetime(2013,2,5,14,0),
DT.datetime(2013,2,5,16,0),
DT.datetime(2013,2,8,20,0),
DT.datetime(2013,2,8,16,50),
DT.datetime(2013,2,8,7,0),
DT.datetime(2013,7,4,8,0)]})
df = df.set_index(['Start'])
现在我想使用itterrows函数修改此DataFrame的子集,例如:
for i, row_i in df[df.Product == 'A'].iterrows():
row_i['Product'] = 'A1' # actually a more complex calculation
但是,更改不会持续存在。
是否有可能(使用索引'i'进行手动查找除外)对原始Dataframe进行持久更改?
答案 0 :(得分:2)
为什么你需要iterrows()呢?我认为在pandas(或numpy)中使用矢量化操作总是比较好:
df.ix[df['Product'] == 'A', "Product"] = 'A1'
答案 1 :(得分:0)
我想我认为最好的方法是生成一个具有所需结果的新向量,您可以循环所需的所有内容,然后将其重新分配回列
#make a copy of the column
P = df.Product.copy()
#do the operation or loop if you really must
P[ P=="A" ] = "A1"
#reassign to original df
df["Product"] = P