Pandas dataframe根据每个sequenti追加行

2024-09-29 04:20:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有三列的数据帧。每行需要根据特定行和列中的值复制和更改两次。但是,其他列中的值需要保持不变。在

我成功地制作了数据帧,如下所示:

df = pd.DataFrame({'Value': list(range(3)), 'Value2': list(range(3)), 'Value3':['A','B','C']})

idx = df['Value'].index

# construct dataframe to append
df_extra1 = df.loc[idx].copy()
df_extra2 = df.loc[idx].copy()
df_extra3 = df.loc[idx].copy()
df_extra4 = df.loc[idx].copy()


# add 3 seconds
df_extra1['Value'] = df_extra1['Value'] + 0.1
df_extra2['Value'] = df_extra2['Value'] - 0.1
df_extra3['Value2'] = df_extra3['Value2'] + 0.1
df_extra4['Value2'] = df_extra4['Value2'] - 0.1

# append to original
res1 = df.append(df_extra1)
res2 = res1.append(df_extra2)
res3 = res2.append(df_extra3)
res4 = res3.append(df_extra4)

结果如下:

^{pr2}$

有没有什么方法可以加快速度或使它更简洁?在


Tags: to数据dfvaluerangeloclistcopy
1条回答
网友
1楼 · 发布于 2024-09-29 04:20:05

目前还不完全清楚您要做什么,但根据您提供的示例,您可以通过迭代要更新的列和尝试应用的更新的产品来简化此过程:

import pandas as pd
from itertools import product

df = pd.DataFrame({'Value': list(range(3)), 'Value2': list(range(3)), 'Value3':['A','B','C']})

to_alter = ['Value', 'Value2']
constants = [0.1, -0.1]

dfs = [df, ]
for col, const in product(to_alter, constants):
    t = df.copy()
    t[col] += const
    dfs.append(t)

result = pd.concat(dfs)

通过附加,您将重复复制数据帧,这并不理想,尤其是因为您已经在开始时创建了副本。在

相关问题 更多 >