gpt4 book ai didi

python - 在两个数据帧上应用 pandas groupby

转载 作者:太空宇宙 更新时间:2023-11-04 04:47:04 26 4
gpt4 key购买 nike

我有两个数据框。它们在形状和形式上是相同的。它们每个都包含许多模拟,并且每个模拟都经过相同数量的步骤,表示为 time

df_init = pd.DataFrame({'sim' : [1, 1, 1, 1, 2, 2, 2, 2],
'time' : [0, 1, 2, 3, 0, 1, 2, 3],
'values' : [1, 2, 1, 0, 2, 1, 2, 3]
})

df_next = pd.DataFrame({'sim' : [1, 1, 1, 1, 2, 2, 2, 2],
'time' : [0, 1, 2, 3, 0, 1, 2, 3],
'values' : [2, 4, 5, 6, 3, 4, 5, 7]
})

df_init
Out[3]:
sim time values
0 1 0 1
1 1 1 2
2 1 2 1
3 1 3 0
4 2 0 2
5 2 1 1
6 2 2 2
7 2 3 3

df_next
Out[4]:
sim time values
0 1 0 2
1 1 1 4
2 1 2 5
3 1 3 6
4 2 0 3
5 2 1 4
6 2 2 5
7 2 3 7

我想构建一个新的数据帧,其中对于每个模拟 sim,第一个 n 时间步来自 df_init,其余来自 df_next.

例如,如果 n=2,结果将如下所示

df_result
Out[3]:
sim time values
0 1 0 1
1 1 1 2
2 1 2 5
3 1 3 6
4 2 0 2
5 2 1 1
6 2 2 5
7 2 3 7

如果只有一个模拟,这会很容易

df_next.iloc[:n] = df_init.iloc[:n]

但是当有一堆模拟时我怎么能这样做呢?我想到了 groupby() 但我真的不知道如何应用它来组合两个数据帧。

当然,这是一个构建的示例。在我的真实数据中,我有一堆值列、数千次模拟和时间变量延伸了数百步。

再一次,我保证数据帧具有相同的形状,并且列 simtime 在两个数据帧中将是相同的。

最佳答案

我认为需要按 cumcount 过滤- 从 0 开始,所以减去 1,然后是 concat一起并按 sort_values 排序:

n=2
a = df_init[df_init.groupby('sim').cumcount() <= n-1]
b = df_next[df_next.groupby('sim').cumcount() > n-1]

df = pd.concat([a,b]).sort_values('sim')
print (df)
sim time values
0 1 0 1
1 1 1 2
2 1 2 5
3 1 3 6
4 2 0 2
5 2 1 1
6 2 2 5
7 2 3 7

关于python - 在两个数据帧上应用 pandas groupby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49316012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com