gpt4 book ai didi

python:使用 .iterrows() 创建列

转载 作者:太空狗 更新时间:2023-10-29 17:57:46 27 4
gpt4 key购买 nike

我正在尝试使用循环函数来创建一个矩阵,该矩阵表示某个产品是否在特定的一周内被看到。

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)

我的目标是查看每个日期范围内每种产品列出了多少替代产品

我已经设置了以下循环:

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..

最佳答案

您不能在此处使用 row 更改 df 以添加新列,您可以引用原始 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() 创建列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31458794/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com