python:使用.iterrows()创建列

我正在尝试使用循环函数创建一个矩阵,该矩阵确定在特定一周内是否出现过某产品。

df中的每一行(代表产品)都有一个close_date(产品关闭的日期)和week_diff(列出产品的周数)。

import pandas

mydata = [{'subid' : 'A', 'Close_date_wk': 25, 'week_diff':3},

{'subid' : 'B', 'Close_date_wk': 26, 'week_diff':2},

{'subid' : 'C', 'Close_date_wk': 27, 'week_diff':2},]

df = pandas.DataFrame(mydata)

我的目标是查看每个date_range中每种产品列出了多少种替代产品

我设置了以下循环:

for index, row in df.iterrows():

i = 0

max_range = row['Close_date_wk']

min_range = int(row['Close_date_wk'] - row['week_diff'])

for i in range(min_range,max_range):

col_head = 'job_week_' + str(i)

row[col_head] = 1

您能帮忙解释一下为什么“ row [col_head] = 1”行既不添加列,也不向该行的该列添加值。

例如,如果:

row A has date range 1,2,3 

row B has date range 2,3

row C has date range 3,4,5'

那么理想情况下,我想结束

row A has 0 alternative products in week 1

1 alternative products in week 2

2 alternative products in week 3

row B has 1 alternative products in week 2

2 alternative products in week 3

&c..

回答:

您不能使用变异的DFrow此处添加新列,你要么是指原来的DF或使用.loc.iloc.ix,例如:

In [29]:

df = pd.DataFrame(columns=list('abc'), data = np.random.randn(5,3))

df

Out[29]:

a b c

0 -1.525011 0.778190 -1.010391

1 0.619824 0.790439 -0.692568

2 1.272323 1.620728 0.192169

3 0.193523 0.070921 1.067544

4 0.057110 -1.007442 1.706704

In [30]:

for index,row in df.iterrows():

df.loc[index,'d'] = np.random.randint(0, 10)

df

Out[30]:

a b c d

0 -1.525011 0.778190 -1.010391 9

1 0.619824 0.790439 -0.692568 9

2 1.272323 1.620728 0.192169 1

3 0.193523 0.070921 1.067544 0

4 0.057110 -1.007442 1.706704 9

您可以修改现有行:

In [31]:

# reset the df by slicing

df = df[list('abc')]

for index,row in df.iterrows():

row['b'] = np.random.randint(0, 10)

df

Out[31]:

a b c

0 -1.525011 8 -1.010391

1 0.619824 2 -0.692568

2 1.272323 8 0.192169

3 0.193523 2 1.067544

4 0.057110 3 1.706704

但是,使用row添加新列将行不通:

In [35]:

df = df[list('abc')]

for index,row in df.iterrows():

row['d'] = np.random.randint(0,10)

df

Out[35]:

a b c

0 -1.525011 8 -1.010391

1 0.619824 2 -0.692568

2 1.272323 8 0.192169

3 0.193523 2 1.067544

4 0.057110 3 1.706704

以上是 python:使用.iterrows()创建列 的全部内容, 来源链接: utcz.com/qa/415762.html

回到顶部