20_Pandas.DataFrame中Series行的随机洗牌

20_Pandas.DataFrame中Series行的随机洗牌

通过使用sample()方法,可以随机重新排列(改组)pandas.DataFrame和pandas.Series的行。虽然还有许多其他方法,但是使用sample()方法很方便,因为不需要导入其他模块。

以下面的数据为例。

import pandas as pd

df = pd.read_csv('./data/20/sample_pandas_normal.csv')
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

该示例是pandas.DataFrame,但是也可以用类似的方式对pandas.Series进行洗牌。

请注意,sort_values()和sort_index()用于根据索引和列值对行进行无序排序。请参阅下面的文章。

sample()方法指定参数frac = 1

有关sample()方法的详细信息,请参见以下文章。

如果参数frac = 1,则意味着对所有行进行随机采样,这等效于对整个行进行随机重排(随机播放)。

df_s = df.sample(frac=1)
print(df_s)
#       name  age state  point
# 2  Charlie   18    CA     70
# 5    Frank   30    NY     57
# 4    Ellen   24    CA     88
# 1      Bob   42    CA     92
# 0    Alice   24    NY     64
# 3     Dave   68    TX     70

可以通过指定参数random_state来固定随机数种子。它们总是以相同的方式排序。

df_s = df.sample(frac=1, random_state=0)
print(df_s)
#       name  age state  point
# 5    Frank   30    NY     57
# 2  Charlie   18    CA     70
# 1      Bob   42    CA     92
# 3     Dave   68    TX     70
# 0    Alice   24    NY     64
# 4    Ellen   24    CA     88

使用reset_index()方法重新分配索引(行号)

可以使用reset_index()方法重新分配改组后的对象的索引(行号)。使用参数drop = True删除原始索引。

df_s = df.sample(frac=1).reset_index(drop=True)
print(df_s)
#       name  age state  point
# 0    Ellen   24    CA     88
# 1  Charlie   18    CA     70
# 2    Alice   24    NY     64
# 3     Dave   68    TX     70
# 4    Frank   30    NY     57
# 5      Bob   42    CA     92

更新原始对象

使用此方法,无法更改原始对象本身,因此,如果要更新原始对象,请将其分配给原始对象并覆盖它。

df = df.sample(frac=1).reset_index(drop=True)
print(df)
#       name  age state  point
# 0     Dave   68    TX     70
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3    Alice   24    NY     64
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值