当前位置: 首页 > 知识库问答 >
问题:

熊猫们在混乱中但秩序井然

查宜修
2023-03-14

假设我有一个由三列组成的数据框架:年龄、性别和国家。

我想随机洗牌这些数据,但在一个有序的方式根据性别。有n个雄性和m个雌性,其中n可以小于、大于或等于m。洗牌应该以这样的方式进行,我们可以在8人的情况下得到以下结果:

男性,女性,男性,女性,男性,女性,女性,女性,......(如果有更多的女性:m

df = pd.DataFrame({'Age': [10, 20, 30, 40, 50, 60, 70, 80],
                   'Gender': ["Male", "Male", "Male", "Female", "Female", "Male", "Female", "Female"], 
'Country': ["US", "UK", "China", "Canada", "US", "UK", "China", "Brazil"]})

共有2个答案

弓举
2023-03-14

使用'Sort\u Column'创建两个新的数据帧,并将df\u maledataframe值设为偶数,将df\u maledataframe值设为奇数。然后,使用pd.concat将它们重新组合在一起,并在'sort\u Column'上使用.sort\u values()

df = pd.DataFrame({'Age': [10, 20, 30, 40, 50, 60, 70, 80],
                   'Gender': ["Male", "Male", "Male", "Female", "Female", "Male", "Female", "Female"], 
'Country': ["US", "UK", "China", "Canada", "US", "UK", "China", "Brazil"]})
df['Sort_Column'] = 0
df_male = df.loc[df['Gender'] == 'Male'].reset_index(drop=True)
df_male['Sort_Column'] = df_male['Sort_Column'] + df_male.index*2
df_female = df1.loc[df1['Gender'] == 'Female'].reset_index(drop=True)
df_female['Sort_Column'] = df_female['Sort_Column'] + df_female.index*2 + 1
df_sorted=pd.concat([df_male, df_female]).sort_values('Sort_Column').drop('Sort_Column', axis=1).reset_index(drop=True)
df_sorted

输出:

    Age Gender  Country
0   10  Male    US
1   40  Female  Canada
2   20  Male    UK
3   50  Female  US
4   30  Male    China
5   70  Female  China
6   60  Male    UK
7   80  Female  Brazil
姬康平
2023-03-14

首先添加每个组内的序列号:

df['Order'] = df.groupby('Gender').cumcount()

然后排序

df.sort_values('Order')

它给你:

   Age  Gender Country  Order
0   10    Male      US      0
3   40  Female  Canada      0
1   20    Male      UK      1
4   50  Female      US      1
2   30    Male   China      2
6   70  Female   China      2
5   60    Male      UK      3
7   80  Female  Brazil      3

如果您想洗牌,请在最开始时执行,例如,df=df.sample(frac=1),请参阅:洗牌数据帧行

 类似资料:
  • 我有两个python发行版(python2.7,python3.6),在这两个我已经安装了和,但不能使用 这些是我尝试导入熊猫时产生的错误 在Python2.7中 文件"/usr/local/lib/python2.7/dist-包/熊猫/init.py",第19行,在"缺少必需的依赖项{0}"中。格式(missing_dependencies)) 缺少必需的依赖项 然后导入Numpy 进口恐怖主

  • 我正在从pandas输出一个csv文件,其中包含一些用于latex报告的调查文本。一些响应在其响应中带有逗号,因此熊猫将数据输出为 通过将字段用双引号括起来,显然可以处理字段中的逗号。 我希望上面看起来像这样: 通过将所述字段包装在{}中,因为这是latex包可以理解的分隔符。 有没有办法告诉熊猫。要做这个吗? 我已经尝试了以下方法 当然,当我需要“}”时,它会用“{”关闭文本包装 更新当我使用p

  • 问题内容: 有没有办法在熊猫中舍入单个列而不影响数据框的其余部分? df.value1.apply(np.round)给出 使数据看起来像这样的正确方法是什么: 问题答案: 你很亲密 您将此回合应用于给出的一系列值。因此,返回类型为Series。您需要将该系列分配回该数据框(或具有相同索引的另一个数据框)。 同样,有一种方法基本上是的简写。

  • 我有一个63 MB的csv文件和患者的血液测试。我无法获得DataFrame。它说: 类型警告:列(5,12,20,21,22,23,24,25,26,30,32,35,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64请在导入时指定dtype选项,或者设置low_memory=Fa

  • 根据java.util.regex.Pattern文档,表示否定,也表示行首。我如何弄清楚在任何程序中用于什么? 这个程序从Java中思考(与上面的问题无关) 我理解的含义,但是其他四种模式是什么意思呢?我可以做些什么来获得输出中除了单词java(不区分大小写)以外的所有内容?

  • 问题内容: 我有python pandas dataframe,其中一列包含月份名称。 如何使用字典进行自定义排序,例如: 问题答案: 熊猫0.15引入了“分类系列”,该分类系列提供了一种更清晰的方法: 首先,将月份列设为分类,然后指定要使用的顺序。 现在,当您对月份列进行排序时,它将相对于该列表进行排序: 注意:如果值不在列表中,它将被转换为NaN。 对于那些有兴趣的人来说,是一个较旧的答案。