python - 如何根据指定行后的位置对 Pandas 数据框进行切片

标签 python pandas

以下代码:

import pandas as pd
df = pd.DataFrame({'col':['A', '1', '2', '3', 'B', '4', '5', 'C', '7', '8', '10']})

生成以下数据框:

   col
0    A
1    1
2    2
3    3
4    B
5    4
6    5
7    C
8    7
9    8
10  10

我想提出一种良好的、pandas 友好的方法来根据字母“A”、“B”或“C”的出现对数据框进行切片。预期结果如下:

   col   col2
1    1      A
2    2      A
3    3      A
5    4      B
6    5      B
8    7      C
9    8      C
10  10      C

我怎样才能做到这一点?

最佳答案

创建一个掩码来找到要拆分的行。创建col2 ,带有掩码的 bool 索引,用完整的原始索引重新索引,前向填充缺失值。对于 col1 , 复制原文col .然后创建最终的 df并用掩码的否定进行索引。

mask = df['col'].isin(['A', 'B', 'C']) # could use df['col'].str.isalpha() also
col2 = df['col'][mask].reindex(df.index).ffill()
col1 = df['col']
df = pd.DataFrame({'col1':col1, 'col2':col2})[~mask]

结果(df):

   col1 col2
1     1    A
2     2    A
3     3    A
5     4    B
6     5    B
8     7    C
9     8    C
10   10    C

关于python - 如何根据指定行后的位置对 Pandas 数据框进行切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68086175/

相关文章:

python - 有没有办法在 Pandas 中将数据类型生成为字典?

python - 如何读取并提取并合并多个大尺寸csv(1G~)?

Python os.pipe 与 multiprocessing.Pipe

python - 在 SimpleITK 中对 3D 图像切片进行操作并创建新的 3D 图像

Python:以时间为优先级的优先级队列

python - ValueError : labels shape must be [batch_size, labels_dimension], 得到 (128, 2)

python-3.x - 替换列值以生成新的数据框

python - 如何重新排序数据帧的顺序以匹配第二个数据帧的顺序?

python - 创建 numpy 数组的重要 View

python - 使用列表制作 pandas df