python - 在多行之间过滤和应用条件

标签 python pandas

我有以下数据框:

client_id   location_id      region_name    location_name
1                123          Florida        location_ABC
6                123          Florida(P)     location_ABC
6                845          Miami(P)       location_THE
1                386          Boston         location_WOP
6                386          Boston(P)      location_WOP

我想做的是:

  • 如果某个 location_id 有多个 client_id,我会选择 client_id == 1。
  • 如果某个 location_id 只有一个 client_id,我会选择它所在的任何一行。

如果我们只实现一种逻辑,它应该像 df[df['client_id'] == 1] 一样简单。但是我不知道如何执行这种需要同时验证更多行的过滤(例如,弄清楚如何检查某个 location_id 是否有多个 client_id)。

因此,在这种情况下,生成的数据框将是:

client_id   location_id      region_name    location_name
1                123          Florida        location_ABC
6                845          Miami(P)       location_THE
1                386          Boston         location_WOP

有什么想法吗?

最佳答案

您可以使用 idxmax在 bool 系列上使用自定义 groupby 等于您的首选 id,然后切片:

out = df.loc[df['client_id'].eq(1).groupby(df['location_id'], wort=False).idxmax()]

输出:

   client_id  location_id region_name location_name
0          1          123     Florida  location_ABC
2          6          845    Miami(P)  location_THE
3          1          386      Boston  location_WOP

关于python - 在多行之间过滤和应用条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73953999/

相关文章:

python - XPathEvalError : Unregistered function for matches() in lxml

python - 使用 numpy einsum 计算矩阵列向量的内积

python - django rest framework "TypeError: ' type'对象不可迭代“错误

python - 创建描述一个月内事件发生次数的时间序列堆积条形图的问题

python - Pandas 数据帧 : to_dict() poor performance

python - 运行 Pairwise Distance 函数后如何维护或恢复 Dataframe 索引?

python - 使用 Highcharts 的 Django Chart

python - pyparsing:嵌套计数数组?

python - 使用等距基数的列在 Pandas 中创建直方图,与范围不成比例

python - pandas中如何比较workers时间范围内的事务时间点将员工添加到事务表中?