Python:使用循环将行添加到现有数据帧中
我正在使用pandas Python库,我希望向现有DF添加行,并保留现有的行 我的数据如下所示:Python:使用循环将行添加到现有数据帧中,python,pandas,dataframe,insert,Python,Pandas,Dataframe,Insert,我正在使用pandas Python库,我希望向现有DF添加行,并保留现有的行 我的数据如下所示: product price max_move_% 1 100 10 for i, row in df_merged.iterrows(): for a in range((row['max_move_%']) * (- 1), row['max_move_%']): df_merged['price_new'] = df_merged['price'] * (1
product price max_move_%
1 100 10
for i, row in df_merged.iterrows():
for a in range((row['max_move_%']) * (- 1), row['max_move_%']):
df_merged['price_new'] = df_merged['price'] * (1 - a / 100.00)
我运行如下循环:
product price max_move_%
1 100 10
for i, row in df_merged.iterrows():
for a in range((row['max_move_%']) * (- 1), row['max_move_%']):
df_merged['price_new'] = df_merged['price'] * (1 - a / 100.00)
我想得到:
product price max_move_% true_move price_new
1 100 10 -10 90
1 100 10 -9 91
.....
1 100 10 10 110
但是什么也没发生,df看起来和以前一样。
如何向列添加新值,同时保留现有df中的数据
我试过这个:
df_loop = []
for i, row in df_merged.iterrows():
for a in range((row['max_move_%']) * (- 1), row['max_move_%'] + 1):
df_loop.append((df_merged['product'], df_merged['price'], f_merged['max_move_%'],a))
pd.DataFrame(df_loop, columns=('product','price','max_move_%','price_new'))
但它不像我想象的那样工作
谢谢大家! 如果我理解正确的话,像这样的事情就行了。使用以下命令在原始数据帧的基础上创建更大的数据帧(但在本例中,行数为原来的21倍): 然后添加新列:
new['true_move'] = [i for i in range(-max_move, max_move + 1)]
new['price_new'] = new['price'] + new['true_move']
这将提供您问题中发布的所需结果
根据较大的数据集的外观,可能需要稍微调整。如果这不符合您的需要,请使用具有代表性的数据集编辑您的问题以进行测试。我刚刚创建了一个包含所有5个所需列的新数据框,以便在此数据框中添加行:
import pandas as pd
df_merged = pd.DataFrame(data=[[1, 100, 10]], columns=['product', 'price', 'max_move_%'])
print(df_merged)
# product price max_move_%
# 0 1 100 10
new_columns = ['product', 'price', 'max_move_%', 'true_move', 'price_new']
df_new = pd.DataFrame(columns=new_columns)
idx = 0
for i, row in df_merged.iterrows():
for true_move in range((row['max_move_%']) * (- 1), row['max_move_%']+1):
price_new = df_merged.iloc[i]['price'] * (1 + true_move / 100.00)
df_new.loc[idx] = row.values.tolist() + [true_move, price_new]
idx += 1
print(df_new)
# product price max_move_% true_move price_new
# 0 1.0 100.0 10.0 -10.0 90.0
# 1 1.0 100.0 10.0 -9.0 91.0
# 2 1.0 100.0 10.0 -8.0 92.0
# 3 1.0 100.0 10.0 -7.0 93.0
# 4 1.0 100.0 10.0 -6.0 94.0
# 5 1.0 100.0 10.0 -5.0 95.0
# 6 1.0 100.0 10.0 -4.0 96.0
# 7 1.0 100.0 10.0 -3.0 97.0
# 8 1.0 100.0 10.0 -2.0 98.0
# 9 1.0 100.0 10.0 -1.0 99.0
# 10 1.0 100.0 10.0 0.0 100.0
# 11 1.0 100.0 10.0 1.0 101.0
# 12 1.0 100.0 10.0 2.0 102.0
# 13 1.0 100.0 10.0 3.0 103.0
# 14 1.0 100.0 10.0 4.0 104.0
# 15 1.0 100.0 10.0 5.0 105.0
# 16 1.0 100.0 10.0 6.0 106.0
# 17 1.0 100.0 10.0 7.0 107.0
# 18 1.0 100.0 10.0 8.0 108.0
# 19 1.0 100.0 10.0 9.0 109.0
# 20 1.0 100.0 10.0 10.0 110.0
我刚刚修改了您的百分比变化公式,用于评估新的列值。您能进一步扩展数据示例吗?对于需要扩展为多行的每个产品,您的数据是否只有一行?您好,是的,非常感谢!100*(1-(-10/100.00))不是等于110而不是90吗?你能从数学上解释一下你想在新的价格栏中得到什么吗?嗨,这是%的变化,所以一旦是最小值将是90,最大值110,这看起来不错:)但是。。我在这行中得到一个错误新的['true\u move']=[I为I在范围内(-max\u move,max\u move+1)]我得到值错误:-->9新的['true\u move']=[I为I在范围内(-max\u move,max\u move+1)]这真是太棒了!!!!!多谢各位!请你给我解释一下这件事好吗?“真移动”列中是否填充了此项?df_new.loc[idx]=row.values.tolist()+[a,price_new]是不是真的移动在price_new之前,这就是为什么在那里填充它?df_new.loc[idx]正在将新行分配到
df_new
dataframe中。此数据帧有5列(所需的列),因此任何新行都有这5个值(每列一个)。Linerow.values.tolist()+[a,price\u new]
创建一个大小为5的python列表,其中包含该行的所有值。sum的第一部分(row.values.tolist()
)将df\u merged
的当前迭代行中的前3个值添加到新行,而sum的第二部分([a,price\u new]
)添加与true\u move
和price\u new
列相对应的最后2个新值。变量a
只需参考true\u move
。编辑它。。。