我有一个数据框,列如下:
col1 col2 col3 col4 col5
a a1 foo1 foo2 foo3
b b1 foo4 foo5 foo6
c c1 foo7 foo8 foo9
a a2 foo10 foo11 foo12
a a3 foo13 foo14 foo15
b b2 foo16 foo17 foo18
我想根据col1
中值的降序频率对这个数据帧的行(整行)进行排序,然后对于行中的其他列,获取列中具有该值的行之一(类似于SQL group by)。我怎样才能在熊猫身上做到这一点?我相信这是groupby和sort\u值的某种组合,但我不确定如何做到这一点。你知道吗
对于上述示例,a
是col1
中最常见的值,其次是b
和c
。因此,我希望结果数据帧的第一行是col1
值为a
的行之一。下一行应该是值为b
的两行之一。最后一行是唯一具有值c
的行。你知道吗
所以这是一个答案:
col1 col2 col3 col4 col5
a a1 foo1 foo2 foo3
b b1 foo4 foo5 foo6
c c1 foo7 foo8 foo9
但这个也是:
col1 col2 col3 col4 col5
a a3 foo13 foo14 foo15
b b1 foo4 foo5 foo6
c c1 foo7 foo8 foo9
还有这个:
col1 col2 col3 col4 col5
a a2 foo10 foo11 foo12
b b2 foo16 foo17 foo18
c c1 foo7 foo8 foo9
任何这些都可以作为结果。更清楚的是,不允许混合来自不同行的值。行必须按原样返回。你知道吗
以下是如何做到这一点:
1)使用
Series.value_counts
创建一个helper系列来获取顺序2)用这个helper系列索引您的原始df并删除重复的
col1
值。你知道吗或在一行中:
[输出]
下面是一个非常简单的方法,首先按col1排序,然后删除重复项:
第1部分的输出:
然后只需在第1列中删除重复项:
输出:
相关问题 更多 >
编程相关推荐