以下是两个按我想要的方式分组的数据帧:

last5s = pd.Timestamp.now().replace(microsecond=0) - pd.Timedelta('5s')
dates = pd.date_range(last5s, periods = 5, freq='s')

N=10
data1 = np.random.randint(0,10,N)
data2 = np.random.randint(0,10,N)

df1 = pd.DataFrame({'timestamp': np.random.choice(dates, size=N), 'A': data1})
df2 = pd.DataFrame({'timestamp': np.random.choice(dates, size=N), 'B': data2})

print(df1)
print(df2)
print()

g1 = df1.groupby(pd.Grouper(key='timestamp', freq='1s'))
print("g1:")
for time, group in g1:
    print('time:', time)
    print(group)
    print()
    
print()
g2 = df2.groupby(pd.Grouper(key='timestamp', freq='1s'))
print('g2:')
for time, group in g2:
    print('time:', time)
    print(group)
    print()

输出(例如):

            timestamp  A
0 2024-03-01 10:05:26  7
1 2024-03-01 10:05:25  8
2 2024-03-01 10:05:28  1
3 2024-03-01 10:05:24  2
4 2024-03-01 10:05:28  5
5 2024-03-01 10:05:27  4
6 2024-03-01 10:05:24  6
7 2024-03-01 10:05:26  3
8 2024-03-01 10:05:26  8
9 2024-03-01 10:05:28  8
            timestamp  B
0 2024-03-01 10:05:25  1
1 2024-03-01 10:05:26  6
2 2024-03-01 10:05:25  5
3 2024-03-01 10:05:28  7
4 2024-03-01 10:05:27  7
5 2024-03-01 10:05:28  1
6 2024-03-01 10:05:28  4
7 2024-03-01 10:05:25  0
8 2024-03-01 10:05:24  6
9 2024-03-01 10:05:24  5

g1:
time: 2024-03-01 10:05:24
            timestamp  A
3 2024-03-01 10:05:24  2
6 2024-03-01 10:05:24  6

time: 2024-03-01 10:05:25
            timestamp  A
1 2024-03-01 10:05:25  8

time: 2024-03-01 10:05:26
            timestamp  A
0 2024-03-01 10:05:26  7
7 2024-03-01 10:05:26  3
8 2024-03-01 10:05:26  8

time: 2024-03-01 10:05:27
            timestamp  A
5 2024-03-01 10:05:27  4

time: 2024-03-01 10:05:28
            timestamp  A
2 2024-03-01 10:05:28  1
4 2024-03-01 10:05:28  5
9 2024-03-01 10:05:28  8


g2:
time: 2024-03-01 10:05:24
            timestamp  B
8 2024-03-01 10:05:24  6
9 2024-03-01 10:05:24  5

time: 2024-03-01 10:05:25
            timestamp  B
0 2024-03-01 10:05:25  1
2 2024-03-01 10:05:25  5
7 2024-03-01 10:05:25  0

time: 2024-03-01 10:05:26
            timestamp  B
1 2024-03-01 10:05:26  6

time: 2024-03-01 10:05:27
            timestamp  B
4 2024-03-01 10:05:27  7

time: 2024-03-01 10:05:28
            timestamp  B
3 2024-03-01 10:05:28  7
5 2024-03-01 10:05:28  1
6 2024-03-01 10:05:28  4

我如何将这些组"联接"在一起,以便可以一起迭代它们?例如,我希望能够做到:

for time, group1, group2 in somehow_joined(g1,g2):
    <do stuff with group1 and group2 in this common time group>

推荐答案

您只需执行以下操作:

for t, d1 in g1:
    d2 = g2.get_group(t)
    if d2 is None:
        print("I don't want this")
        continue

    print(d1)
    print('-'*10)
    print(d2)
    print('='*30)

输出:

            timestamp  A
0 2024-02-29 19:10:14  0
3 2024-02-29 19:10:14  7
7 2024-02-29 19:10:14  1
----------
            timestamp  B
1 2024-02-29 19:10:14  0
3 2024-02-29 19:10:14  6
5 2024-02-29 19:10:14  9
6 2024-02-29 19:10:14  4
==============================
            timestamp  A
2 2024-02-29 19:10:15  2
5 2024-02-29 19:10:15  8
6 2024-02-29 19:10:15  2
9 2024-02-29 19:10:15  6
----------
            timestamp  B
8 2024-02-29 19:10:15  9
==============================
            timestamp  A
1 2024-02-29 19:10:16  3
4 2024-02-29 19:10:16  9
8 2024-02-29 19:10:16  6
----------
            timestamp  B
2 2024-02-29 19:10:16  6
4 2024-02-29 19:10:16  6
==============================

Python相关问答推荐

如何检测背景有噪的图像中的正方形

重新匹配{ }中包含的文本,其中文本可能包含{{var}

OR—Tools中CP—SAT求解器的IntVar设置值

如何让这个星型模式在Python中只使用一个for循环?

未知依赖项pin—1阻止conda安装""

实现神经网络代码时的TypeError

用渐近模计算含符号的矩阵乘法

* 动态地 * 修饰Python中的递归函数

统计numpy. ndarray中的项目列表出现次数的最快方法

如何在一组行中找到循环?

应用指定的规则构建数组

如何在PythonPandas 中对同一个浮动列进行逐行划分?

python3中np. divide(x,y)和x/y有什么区别?'

分解polars DataFrame列而不重复其他列值

类型对象';敌人';没有属性';损害';

在任何要保留的字段中添加引号的文件,就像在Pandas 中一样

来自任务调度程序的作为系统的Python文件

在不降低分辨率的情况下绘制一组数据点的最外轮廓

牛郎星直方图中分类列的设置顺序

跨两个数据帧收集非索引列上的公共组