我有一个包含 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/