我想知道,当不同的数据帧行由于缺少时间戳而具有不同的行数时,是否有方法计算它们的总和。我有以下例子:
import pandas as pd
data1 = {'produced': [19.7, 39.1, 86.4, 167.1]}
data2 = {'produced': [22.4, 95, 144.3, 300.2]}
data3 = {'produced': [15.1, 44.1, 80, 302.5]}
df1 = pd.DataFrame(data1, index = ['01/06/2021 09:35', '01/06/2021 09:40', '01/06/2021 09:45', '01/06/2021 09:50'])
df2 = pd.DataFrame(data2, index = ['01/06/2021 09:35', '01/06/2021 09:45', '01/06/2021 09:50', '01/06/2021 09:55'])
df3 = pd.DataFrame(data3, index = ['01/06/2021 09:35', '01/06/2021 09:40', '01/06/2021 09:45', '01/06/2021 09:55'])
正如你所看到的,我有一些具有不同行号的dfs,因为有几个";空白";价值观我想做的是计算每5分钟一行的总和。间隔,然后跳过空格。如果我按原样对行进行求和,我将错误地对不同的时间戳进行求和。
此外,是否可以将丢失的时间戳存储在数组或类似的东西中?提前谢谢!
concat然后sum:
pd.concat([df1,df2,df3]).sum(level=0)
# pd.concat([df1,df2,df3]).groupby(level=0).sum()
输出:
produced
01/06/2021 09:35 57.2
01/06/2021 09:40 83.2
01/06/2021 09:45 261.4
01/06/2021 09:50 311.4
01/06/2021 09:55 602.7
您还可以合并索引上的数据帧,并跨行求和。这样,您可以看到缺少值的数据帧。
df_total = df1.add_suffix("_df1")
for i, df in enumerate([df2, df3], start=2):
df = df.add_suffix("_df{}".format(i))
df_total = df_total.merge(df, right_index=True, left_index=True, how="outer")
df_total["sum"] = df_total.sum(axis=1)
print(df_total)
输出:
produced_df1 produced_df2 produced_df3 sum
01/06/2021 09:35 19.7 22.4 15.1 57.2
01/06/2021 09:40 39.1 NaN 44.1 83.2
01/06/2021 09:45 86.4 95.0 80.0 261.4
01/06/2021 09:50 167.1 144.3 NaN 311.4
01/06/2021 09:55 NaN 300.2 302.5 602.7