pandas 如何返回一个子 Dataframe 并追加一个额外的行?

ttcibm8c  于 2023-05-21  发布在  其他
关注(0)|答案(3)|浏览(111)

我有一个4列的数据框,start_time, end_time, quantity_start, quantity_end。一个例子)

start_time end_time quantity_start quantity_end
0          10       0              1
10         20       1              3
20.        30       3              10

下一行的start_timequantity_start始终等于前一行的end_timequantity_end
我需要返回一个仅由start_timequantity_start组成的子 Dataframe ,但需要包括一个额外的行,用于解释与最后一个end_timeend_time相关联的quantity_end
所以在上面的例子中,需要返回的dataframe应该是:

start_time quantity_start
0          0              
10         1              
20.        3              
30         10

实现这一目标的最佳途径是什么?

tkclm6bt

tkclm6bt1#

可以使用lreshapedrop_duplicates

out = pd.lreshape(df, {'start_time': ['start_time', 'end_time'],
                       'quantity_start': ['quantity_start', 'quantity_end']}
                  ).drop_duplicates(ignore_index=True)

输出:

start_time  quantity_start
0           0               0
1          10               1
2          20               3
3          30              10
0yycz8jy

0yycz8jy2#

另一种可能的解决方案:

row = pd.DataFrame({
    'start_time': df['end_time'].iat[-1],
    'quantity_start': df['quantity_end'].iat[-1]
}, index=[len(df)])

pd.concat([df, row]).filter(like='start')

输出:

start_time  quantity_start
0           0               0
1          10               1
2          20               3
3          30              10
14ifxucb

14ifxucb3#

这里有一种方法:

out = (
    df.melt(id_vars=["start_time", "end_time"])
           .drop(["variable", "end_time"], axis=1)
           .drop_duplicates(subset="value", keep="first")
           .rename(columns={"value": "quantity_start"})
           .reset_index(drop=True)
)

out.at[len(out)-1, "start_time"] = df.at[len(df)-1, "end_time"]

输出:

print(out)

   start_time  quantity_start
0        0.00               0
1       10.00               1
2       20.00               3
5       30.00              10

相关问题