为了账号安全,请及时绑定邮箱和手机立即绑定

在熊猫中洗牌但有序

在熊猫中洗牌但有序

幕布斯6054654 2022-12-27 14:39:39
假设我有一个包含三列的数据框:年龄、性别和国家/地区。我想随机打乱这些数据,但要根据性别以有序的方式打乱。有 n 个男性和 m 个女性,其中 n 可以小于、大于或等于 m。洗牌应该以这样一种方式发生,即我们得到以下 8 人规模的结果:male, female, male, female, male, female, female, female,....(如果有更多的女性:m > n) male, female, male, female, male, male, male, male(如果有more males: n > m) male, female, male, female, male, female, male, female, male, female (如果男女相等:n = 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 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

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


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),请参阅:Shuffle DataFrame rows


查看完整回答
反对 回复 2022-12-27
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

使用 a 创建两个新的数据帧,'Sort_Column'并使数据帧为df_male偶数值和数据帧为df_female奇数值。然后,使用pd.concat将它们重新组合在一起并.sort_values()在'Sort_Column'.


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


查看完整回答
反对 回复 2022-12-27
  • 2 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号