【问题标题】:Shift rows in pandas dataframe in a specific order按特定顺序移动 pandas 数据框中的行
【发布时间】:2020-10-04 12:08:26
【问题描述】:

我有一个看起来像这样的熊猫数据框:

df = pd.DataFrame({
     'job': ['football','football', 'football', 'basketball', 'basketball', 'basketball', 'hokey', 'hokey', 'hokey', 'football','football', 'football', 'basketball', 'basketball', 'basketball', 'hokey', 'hokey', 'hokey'],
     'team': [4.0,5.0,9.0,2.0,3.0,6.0,1.0,7.0,8.0, 4.0,5.0,9.0,2.0,3.0,6.0,1.0,7.0,8.0],
     'cluster': [0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1]
     })

每个cluster 包含 9 个团队。每个集群有 3 支每种运动类型的团队 footballbasketballhokey。我想对每个集群应用一个移位函数,以便团队的顺序以一种非常具体的方式出现(我试图用颜色突出显示它):

如何为更大的数据框进行这种转换(以上面显示的方式移动行)?

【问题讨论】:

  • 请说明您的排序标准是什么
  • 我试图在上面解释它。对于每个集群:分别采取第一队footballbasketballhockey。然后分别采取第二队footballbasketballhockey。然后分别取第三队footballbasketballhockey。希望你能在我的图中看到模式
  • 我现在明白了。让我想想办法

标签: python pandas dataframe row shift


【解决方案1】:

让我们使用groupby + cumcount 创建基于列clusterjob 的顺序计数器,然后使用sort_valuesclustercounter 上的数据帧进行排序:

df['j'] = df.groupby(['cluster', 'job']).cumcount()
df = df.sort_values(['cluster', 'j'], ignore_index=True).drop('j', axis=1)

           job  team  cluster
0     football   4.0        0
1   basketball   2.0        0
2        hokey   1.0        0
3     football   5.0        0
4   basketball   3.0        0
5        hokey   7.0        0
6     football   9.0        0
7   basketball   6.0        0
8        hokey   8.0        0
9     football   4.0        1
10  basketball   2.0        1
11       hokey   1.0        1
12    football   5.0        1
13  basketball   3.0        1
14       hokey   7.0        1
15    football   9.0        1
16  basketball   6.0        1
17       hokey   8.0        1

【讨论】:

  • @PParker 编码快乐!
猜你喜欢
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 2021-09-23
  • 1970-01-01
  • 2019-03-20
  • 2019-09-29
相关资源
最近更新 更多