亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在熊貓中洗牌但有序

在熊貓中洗牌但有序

幕布斯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 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號