按值范围将 Pandas DataFrame 复制到多个文件中

Copy Pandas DataFrame into multiple files by Value Range

我有一个 DataFrame,假设 3000x3000,int 值从 0 到 10,我想将它分解成类别并保存到单独的文件中。

例如,类别应该是 0-3、4-5、5-10。

因此我想获得 3 个形状相同但每个类别只有相关值的文件,并且这些值应保留在原始位置。

起初我想为每个类别复制 df 并使用 replace 删除所有不相关的值,但这听起来不对。

希望这不是很混乱。

df 示例:

    0   1   2   3   4   5   6   7   8   9
0   0   0   0   0   0   0   0   0   0   0
1   0   0   1   0   0   0   0   0   7   0
2   0   0   2   3   0   0   0   0   6   7
3   0   0   2   3   0   0   0   0   9   6
4   0   0   0   1   0   0   5   4   8   7
5   0   0   0   0   0   0   5   4   0   0
6   0   0   0   0   0   0   4   5   0   0
7   0   0   0   0   0   0   4   4   0   0
8   0   0   0   0   0   0   0   4   0   0
9   0   0   0   0   0   0   0   0   0   0

结果我想要 3 个数据帧:

cat1:

    0   1   2   3   4   5   6   7   8   9
0   0   0   0   0   0   0   0   0   0   0
1   0   0   1   0   0   0   0   0   0   0
2   0   0   2   3   0   0   0   0   0   0
3   0   0   2   3   0   0   0   0   0   0
4   0   0   0   1   0   0   0   0   0   0
5   0   0   0   0   0   0   0   0   0   0
6   0   0   0   0   0   0   0   0   0   0
7   0   0   0   0   0   0   0   0   0   0
8   0   0   0   0   0   0   0   0   0   0
9   0   0   0   0   0   0   0   0   0   0

cat2:

    0   1   2   3   4   5   6   7   8   9
0   0   0   0   0   0   0   0   0   0   0
1   0   0   0   0   0   0   0   0   0   0
2   0   0   0   0   0   0   0   0   0   0
3   0   0   0   0   0   0   0   0   0   0
4   0   0   0   0   0   0   5   4   0   0
5   0   0   0   0   0   0   5   4   0   0
6   0   0   0   0   0   0   4   5   0   0
7   0   0   0   0   0   0   4   4   0   0
8   0   0   0   0   0   0   0   4   0   0
9   0   0   0   0   0   0   0   0   0   0

cat3:

    0   1   2   3   4   5   6   7   8   9
0   0   0   0   0   0   0   0   0   0   0
1   0   0   0   0   0   0   0   0   7   0
2   0   0   0   0   0   0   0   0   6   7
3   0   0   0   0   0   0   0   0   9   6
4   0   0   0   0   0   0   0   0   8   7
5   0   0   0   0   0   0   0   0   0   0
6   0   0   0   0   0   0   0   0   0   0
7   0   0   0   0   0   0   0   0   0   0
8   0   0   0   0   0   0   0   0   0   0
9   0   0   0   0   0   0   0   0   0   0

你想要where

df1 = df.where((df > 0) & (df <=3), 0)
   
   0  1  2  3  4  5  6  7  8  9
0  0  0  0  0  0  0  0  0  0  0
1  0  0  1  0  0  0  0  0  0  0
2  0  0  2  3  0  0  0  0  0  0
3  0  0  2  3  0  0  0  0  0  0
4  0  0  0  1  0  0  0  0  0  0
5  0  0  0  0  0  0  0  0  0  0
6  0  0  0  0  0  0  0  0  0  0
7  0  0  0  0  0  0  0  0  0  0
8  0  0  0  0  0  0  0  0  0  0
9  0  0  0  0  0  0  0  0  0  0

您可以为 df2 和 df3 编写类似的逻辑