python基于Split Dataframe的第一次出现

时间:2018-06-13 18:31:50

标签: python pandas

您好我正在尝试将数据框拆分为2: 第一个数据框应该首先出现所有行,并将所有出现的行保留在另一个表中。请参阅下面的示例输入数据框和我正在寻找的输出数据框: 在分割之前,我将按组和数字对数据进行排序

输入数据:

Group               number

Short               1
Short               2
Moderate            55
Moderate            31
Tall                24
Tall                11
yellow              101

Dataframe 1

Group              Number
Short                1
Moderate            55
Tall                24
Yellow              101

Dataframe 2

Group           Number
Short             2
moderate          31
Tall              11

请告知我如何解决这个问题。如果重复问题,请指出已经提供的任何解决方案。

由于

4 个答案:

答案 0 :(得分:4)

您可以将groupbyfirst用于df1:

df1 = df.reset_index().groupby('Group', as_index=False).first().set_index('index')

对于df2,那么你可以:

df2 = df.drop(df1.index)

答案 1 :(得分:1)

drop_duplicates可用于保留第一次出现,其余的可以通过排除这些索引来切片:

first_occ = df.drop_duplicates(subset='Group', keep='first')

rest = df[~df.index.isin(first_occ.index)]

答案 2 :(得分:0)

我们可以利用你的df如此排序的事实:

>>> df[df['Group'] != df['Group'].shift(1)]
      Group  number
0     Short       1
2  Moderate      55
4      Tall      24
6    yellow     101
>>> df[df['Group'] == df['Group'].shift(1)]
      Group  number
1     Short       2
3  Moderate      31
5      Tall      11

答案 3 :(得分:0)

如果您有两个以上,则可以使用此代码捕获每个实例:

df_set = df.set_index(df.groupby('Group').cumcount(), append=True).swaplevel(0,1)

First Occurance:

df_set.loc[0] 

输出:

      Group  number
0     Short       1
2  Moderate      55
4      Tall      24
6    yellow     101

第二次发生:

df_set.loc[1]

输出:

      Group  number
1     Short       2
3  Moderate      31
5      Tall      11

等等,增加了df_set的loc索引。