繁体   English   中英

根据列值对有序pandas数据帧中的行进行分组

group rows in ordered pandas dataframe depending on column values

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个问题,即在pandas数据框(按时间戳排序)中仅将某些行分组在一起,具体取决于它们的列值。

所以这是一个例子:

df=pd.DataFrame({"text":["Hello.",
                    "I had a question.", 
                    "Hi!",
                    "Yes how can I help?",
                    "Do you ship to the UK?"
                    ],
            "timestamp":[
                        pd.Timestamp('20131213 11:50:00'),
                        pd.Timestamp('20131213 11:51:00'),
                        pd.Timestamp('20131213 11:52:00'),
                        pd.Timestamp('20131213 11:53:00'),
                        pd.Timestamp('20131213 11:54:00')
                        ],
            "direction":["In","In","Out","Out","In"]})

这就是数据框的样子:

在此输入图像描述

该数据帧按时间戳排序,并且可以是(例如)聊天线程,其中方向“In”可以是一个人说话而“Out”是另一个人说话。

我想得到的是这样的: 在此输入图像描述

在最终的数据框中,如果行的文本方向相同,则行的文本将组合在一起,但行只能组合在一起,直到您到达具有不同方向的行。 并保留消息的顺序。

有没有人有任何想法?

2 个回复

设定

operations = {
    'text': ' '.join,
    'direction': 'first',
}

使用agg和一个常用技巧按连续值分组:

df.groupby(df.direction.ne(df.direction.shift()).cumsum()).agg(operations)

                               text direction
direction
1          Hello. I had a question.        In
2           Hi! Yes how can I help?       Out
3            Do you ship to the UK?        In

做这样的事情怎么样:

# indicate direction changes
df['dir'] = df.direction.shift(1).bfill()
df['dir_change'] = df.apply(lambda x: 1 if x.direction != x.dir else 0, axis=1)

# create new groups
df['new_group'] = df.dir_change.cumsum()

# group on new groups and aggregate the text
agg_df = df.groupby('new_group').agg({'text':lambda x: ' '.join(list(x)), 'timestamp':'first'})
1 如何按列的值对pandas数据帧的行进行分组?

如何按列的值对pandas数据帧的行进行分组? 假设我们有一个名为df的数据框: 我想使用groupby创建以下内容: 我确实意识到.loc是一个选择。 但对于我正在研究的超大型数据集来说,这是非常缓慢的。 这就是为什么我认为把它放在列表字典中可能会更好。 谢谢。 ...

2 将 Pandas 数据帧按有序值分成簇

我有一个 Pandas 数据帧,就像时间间隔更长一样,我想将它们切成较小的数据帧,其中时间“集群”在一起 我尝试对它进行排序并使用连续两个点的时间差 它给 假设我想将此数据帧切片为较小的数据帧,其中两个连续点之间的时间差小于 40 我将如何执行此操作? 我可以循环行,但这是不赞成的,所 ...

3 如何计算pandas数据帧上的连续有序值

我试图从pandas上的数据框中获取来自给定数据帧的连续0值的最大计数,其中id,date,value列看起来像这样: 所需的结果将按Id分组,如下所示: 我已经实现了我想要的功能但是当你使用庞大的熊猫数据帧时它变得非常慢,我发现了一些类似的解决方案,但它根本不能解决我的问题。 ...

4 在R中对行进行有序分组

我想创建一个新列,按顺序标记行组。 原始数据: 期望的输出: dplyr尝试: 如何编辑这个以使第一组苹果为1,然后第一组橙子为1,然后第二组苹果为2等(参见上面的所需输出)。 也对data.table解决方案开放。 ...

6 基于存储在独立有序向量中的值对对数据帧进行子集

我有一个 R 数据框,我需要从中提取数据子集。 子集将基于数据框中的两列。 例如: 这就是 DATA 的样子 我想要那些 (A,B) 组合为 (1,6) 和 (3,8) 的数据行。 这些对存储为 A 和 B 的单独(有序)向量: 现在,我想通过比较基本子集数据如果某列存在于ALIST A ...

2014-03-18 23:01:13 2 2790   r/ subset
7 在pandas数据帧中对列重复进行分组

现在有很多类似的问题,但大多数都回答了如何删除重复的列。 但是,我想知道如何创建元组列表,其中每个元组包含重复列的列名。 我假设每列都有一个唯一的名称。 只是为了进一步说明我的问题: 然后我想要输出: 如果你今天感觉很棒,那么也可以将相同的问题扩展到行。 如何获取每个元组 ...

8 在Pandas数据帧中对列进行分组和排序

我有一个包含许多列的Pandas数据框,其中一个是“电影标题”,我想查找出现在大多数行中的前5个电影标题,并按降序排列。 例如: 应该成为: 它可以在相同或新的数据框中。 由于我对Pandas非常陌生,我可能会错过一个简单的解决方案。 谢谢你的帮助! ...

10 如何检查列值在pandas数据框中是否有序?

我有一个像下面的数据框- 我想知道特定qa和prod的消息字段中缺少哪些数字。 如果缺少任何数字,那么我想要缺少多少个数字,上一个可用的开始时间和下一个可用的结束时间以及相应的消息号。 我想以csv格式生成一个输出文件,其标题如下所示- 机器是固态的还是液态的(在这种 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM