我有一个dataframe,其中有一个animals列,列中有不同的动物(比如["cat"、"dog"、"lion"]),每种动物对应一个值。有10种不同的动物,每种动物有50个条目。动物没有任何特定的顺序。
我想把 Dataframe 分成两个,一个包含每种动物的40个,另一个包含每种动物的10个。也就是说,一个 Dataframe 应该包含40只猫,40只狗等,另一个 Dataframe 应该包含10只猫,10只狗等。
任何帮助都将不胜感激。
我试过用独特的值来排序,但是没有成功。我对Pandas还不是很熟悉,这是我第一次使用它。
编辑:
添加一个更好的示例来说明我需要什么
| 动物|价值|
| - ------| - ------|
| 制动爪|十二|
| 猫|十四|
| 制动爪|十个|
| 猫|四十|
| 制动爪|九十|
| 制动爪|八十|
| 猫|三十|
| 制动爪|二十个|
| 猫|二十个|
| 猫|二十三|
我想把它分成2个 Dataframe ,在这个例子中,第一个 Dataframe 中每种动物有3个,另一个 Dataframe 中每种动物有2个。
| 动物|价值|
| - ------| - ------|
| 制动爪|十二|
| 制动爪|十个|
| 制动爪|九十|
| 猫|十四|
| 猫|四十|
| 猫|三十|
| 动物|价值|
| - ------| - ------|
| 制动爪|八十|
| 制动爪|二十个|
| 猫|二十个|
| 猫|二十三|
4条答案
按热度按时间vbkedwbf1#
df.groupby('animal', group_keys=False).apply(lambda x: x.sample(frac=0.2))
然后您可以从原始 Dataframe 中删除这些行,以创建每种动物40个的 Dataframe 。iqjalb3h2#
您可以通过以下方式获得两个 Dataframe :
z2acfund3#
我们可以构造一个自定义函数,根据一个应该包含每种动物的40个条目,另一个应该包含10个条目的要求返回两个DataFrame,然后将该函数应用于DataFrame,按“Animal”列分组:
产生的两个数据框将打印到控制台。在本例中,第一个数据框(df1)中的每只动物将有4个条目,第二个数据框(df2)中的每只动物的最后10个条目(本例中每只动物1个条目)。
3z6pesqy4#
Pandas是真正强大的,你可以看到从@jmendes16提案.
你不知道,应该考虑的是,如果你想要40个任意挑选的值或第一个/最后一个等,此外是最后的顺序很重要。
如果你想熟悉Pandas,你可以试着一步一步地做,选择其中的一部分,然后把它们组合起来。例如,如果你想得到首批40只狗,你可以这样做:
编辑:这不是一个有效的,而是教育的解决方案;).