熊猫数据框根据每个连续行追加行

时间:2019-08-23 21:43:45

标签: python pandas dataframe

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

我设法制作了数据框,如下所示:

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)

这是结果,应该是这样:

   Value  Value2 Value3
0    0.0     0.0      A
1    1.0     1.0      B
2    2.0     2.0      C
0    0.1     0.0      A
1    1.1     1.0      B
2    2.1     2.0      C
0   -0.1     0.0      A
1    0.9     1.0      B
2    1.9     2.0      C
0    0.0     0.1      A
1    1.0     1.1      B
2    2.0     2.1      C
0    0.0    -0.1      A
1    1.0     0.9      B
2    2.0     1.9      C 

是否有办法加快速度或使其更加简洁?

1 个答案:

答案 0 :(得分:1)

尚不清楚您要做什么,但是根据您提供的示例,可以通过迭代要更新的列的乘积和要应用的更新来简化此操作:

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)

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