您好我正在尝试将数据框拆分为2: 第一个数据框应该首先出现所有行,并将所有出现的行保留在另一个表中。请参阅下面的示例输入数据框和我正在寻找的输出数据框: 在分割之前,我将按组和数字对数据进行排序
Group number
Short 1
Short 2
Moderate 55
Moderate 31
Tall 24
Tall 11
yellow 101
Group Number
Short 1
Moderate 55
Tall 24
Yellow 101
Group Number
Short 2
moderate 31
Tall 11
请告知我如何解决这个问题。如果重复问题,请指出已经提供的任何解决方案。
由于
答案 0 :(得分:4)
您可以将groupby
和first
用于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)
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索引。