我有一个csv文件(2个不同的样本)
from io import StringIO
import pandas as pd
dfa = pd.read_csv(StringIO("""
Date/Time ID C_1 C_2 C_3 C_4 C_5 C_6 C_7 C_8 C_9 C_10
"18/06/2023 3:51:53" 136 101 2028 61 4 3 18 0 0 2 2
"18/06/2023 3:51:54" 24 101 2029 65 0 0 0 1 1 NA 1
"18/06/2023 3:51:55" 16 101 2022 89 0 0 0 0 0 NA 7
"18/06/2023 3:51:56" 136 101 2024 90 0 0 0 0 0 NA 3
"18/06/2023 3:51:57" 24 101 2026 87 0 1 8 0 0 9 2
"18/06/2023 3:51:58" 136 101 2023 33 0 1 87 0 0 2 2"""), sep="\s+")
dfb = pd.read_csv(StringIO("""
Date/Time ID C_1 C_2 C_3 C_4 C_5 C_6 C_7 C_8 C_9 C_10
"18/06/2023 3:51:53" 24 101 2029 65 0 0 0 1 1 NA 1
"18/06/2023 3:51:54" 136 101 2028 61 4 3 18 0 0 2 2
"18/06/2023 3:51:55" 16 101 2022 89 0 0 0 0 0 NA 7
"18/06/2023 3:51:56" 136 101 2024 90 0 0 0 0 0 NA 3
"18/06/2023 3:51:57" 136 101 2023 33 0 1 87 0 0 2 2
"18/06/2023 3:51:58" 24 101 2026 87 0 1 8 0 0 9 2"""), sep="\s+")
dfc = pd.read_csv(StringIO("""
Date/Time ID C_1 C_2 C_3 C_4 C_5 C_6 C_7 C_8 C_9 C_10
"18/06/2023 3:51:53" 136 101 2028 61 4 3 18 0 0 2 2
"18/06/2023 3:51:54" 24 101 2029 65 0 0 0 1 1 NA 1
"18/06/2023 3:51:54" 136 102 2045 61 2 3 4 5 6 7 8
"18/06/2023 3:51:55" 16 101 2022 89 0 0 0 0 0 NA 7
"18/06/2023 3:51:56" 136 101 2024 90 0 0 0 0 0 NA 3
"18/06/2023 3:51:56" 16 102 2022 89 0 0 0 0 0 NA 11
"18/06/2023 3:51:56" 136 101 2024 90 0 0 0 0 0 NA 3
"18/06/2023 3:51:57" 24 101 2026 87 0 1 8 0 0 9 2
"18/06/2023 3:51:58" 24 102 2045 44 43 42 41 40 39 38 37
"18/06/2023 3:51:59" 136 101 2023 33 0 1 87 0 0 2 2"""), sep="\s+")
字符串
我试图读取行值(几列)使用以下条件-
- 检查ID ='16',如果匹配,读取'日期/时间'、'C_1'和'C_10'列值。
- 找到ID ='136'的第一个前一行位置(从ID ='16'开始),并读取从C_2到C_8的列值。
- 找到第一个前一个或第一个下一个(从ID ='16')行位置,其中ID ='24',并读取'C_9'列值(2行中不为空的一行,或如果两行都为空,则留空)。
输出-
Date/Time ID C_1 C_2 C_3 C_4 C_5 C_6 C_7 C_8 C_9 C_10
18/06/2023 3:51:55 16 101 2028 61 4 3 18 0 0 9 7
型
1条答案
按热度按时间vybvopom1#
如果我理解正确的话,将三种可能性进行切片,使用
mask
和ffill
/bfill
,然后聚合为一行groupby.first
:字符串
concat
中切片的顺序给出,第一个非NaN值将被保留。此外,如果C_1/C_2中有多个可能的值,则应将ffill
/bfill
替换为.groupby(['ID', 'C_1', 'C_10']).ffill()
/bfill()
。输出量:
型
溶液/C_1组
型
输出(使用
dfc
作为输入):型