繁体   English   中英

熊猫:在数据框子集上使用迭代

[英]Pandas: Use iterrows on Dataframe subset

用DataFrame的子集进行迭代的最佳方法是什么?

让我们举一个简单的例子:

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进行持久更改?

为什么为此需要iterrows()? 我认为在熊猫(或numpy)中使用向量化运算始终是可取的:

df.ix[df['Product'] == 'A', "Product"] = 'A1'

我想我想到的最好的方法是生成具有所需结果的新向量,您可以在其中循环所需的所有内容,然后将其重新分配给列

#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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM