python - 根据条件打乱数据帧的行

标签 python pandas

我有一个包含 ID 列的数据框,我想打乱仅具有特定 ID 的行。

我的数据框的一个例子是:

-------------------------------
   ID   |   Fruit   |   Color
-------------------------------
 1         apple       green
 2         orange      orange
 1         pear        green
 2         grapefruit  yellow
 1         banana      yellow
 2         tomato      red
 1         grape       black
 2         melon       yellow

我并没有对迄今为止通过 df.sample(frac=1) 获得的整个数据帧进行洗牌,而是尝试找出如何仅对 ID=1 的数据进行洗牌。我尝试了下面的方法,但产生了语法错误。

df.apply(lambda x: df.sample(frac=1) if x['ID'] == 1)

最佳答案

想法是通过掩码过滤行 boolean indexing ,获取 sample 并将转换值分配回 numpy 数组以防止索引对齐:

m = df['ID'] == 1

df[m] = df[m].sample(frac=1).to_numpy()
#oldier pandas versions
#df[m] = df[m].sample(frac=1).values
print (df)
   ID       Fruit   Color
0   1        pear   green
1   2      orange  orange
2   1       grape   black
3   2  grapefruit  yellow
4   1       apple   green
5   2      tomato     red
6   1      banana  yellow
7   2       melon  yellow

关于python - 根据条件打乱数据帧的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59391032/

相关文章:

python - 同一列中具有不同格式的 Pandas 日期时间

python - 如何在 pandas 中的情况下对分类变量应用逻辑比较

python - pandas 根据条件和时间戳序列对数据帧进行切片

python - pandas 使用列子集时的SettingWithCopyWarning

python - Matplotlib 直方图不显示分布细节

python - python中的字符串比较

python - Pandas 中的 SQL 注入(inject);绑定(bind)列表到 SQLAlchemy 中的参数

python - 将包含字典的 Pandas 列转换为多行

python - 这个 Python "static variable"hack 可以使用吗?

python - 无法从docker容器连接到本地elasticsearch进程