gpt4 book ai didi

python - Pandas:标记另一列标志之间的值

转载 作者:行者123 更新时间:2023-12-01 01:36:03 25 4
gpt4 key购买 nike

工作流程如下:

  1. 然后按 LineNum 分组
  2. 将 LWS 列中大于 50 的值标记为“开始”
  3. 将文本列中包含“:”(冒号)的值标记为“结束”
  4. 在“ExpectedFlag”中将开始和结束之间的值标记为 1

我已完成第 3 步,即名为“end”的列

我无法弄清楚如何像 ExpectedFlag 中那样标记开始和结束之间的值。有什么方法可以使用 pandas 操作来标记它吗?

        text  LWS LineNum   start   end     ExpectedFlag
0 somethin 3 2 0 0 0
1 somethin 3 2 0 0 0
2 somethin 2 2 0 0 0
3 value 70 2 1 0 1
4 value 3 2 0 0 1
5 value: 3 2 0 1 1
6 val1 200 3 1 0 1
7 val1: 3 3 0 1 1
8 val2 3 3 0 0 0
9 val2 100 3 1 0 1
10 val2: 3 3 0 1 1
11 djsal 3 3 0 0 0
12 jdsal 3 3 0 0 0
13 ajsd 3 3 0 0 0

最佳答案

关于start之间的填充值和end ,这可以根据this answer如下完成:

数据:

df = pd.DataFrame([[0,0],[0,0],[0,0],[1,0],[0,0],[0,1],[0,0],[0,0],[1,0],[0,1],[0,0],[0,0],[0,0],[0,0],[1,0],[0,0],[0,0],[0,1],[0,0],[0,0],[0,0],],columns=['start','end'])

   start end
0 0 0
1 0 0
2 0 0
3 1 0
4 0 0
5 0 1
6 0 0
7 0 0
8 1 0
9 0 1
10 0 0

获取 start 的索引和end :

s = df.start.nonzero()[0]
e = df.end.nonzero()[0]
>>> s, e
(array([3, 8], dtype=int64), array([5, 9], dtype=int64))

reshape 原始索引:

>>> index = df.index.values.reshape(-1,1)

array([[ 0],
[ 1],
[ 2],
[ 3],
[ 4],
[ 5],
[ 6],
[ 7],
[ 8],
[ 9],
[10]], dtype=int64)

然后我们可以利用numpy的broadcasting :

>>> index < [1]       >>> index < [1,2,3,4,5]
array([[ True], array([[ True, True, True, True, True],
[False], [False, True, True, True, True],
[False], [False, False, True, True, True],
[False], [False, False, False, True, True],
[False], [False, False, False, False, True],
[False], [False, False, False, False, False],
[False], [False, False, False, False, False],
[False], [False, False, False, False, False],
[False], [False, False, False, False, False],
[False], [False, False, False, False, False],
[False]]) [False, False, False, False, False]])

对于每个 start -end对生成条件:

>>> ((s <= index) & (index <= e))

array([[False, False],
[False, False],
[False, False],
[ True, False],
[ True, False],
[ True, False],
[False, False],
[False, False],
[False, True],
[False, True],
[False, False]])

然后使用sum :

 df['Expected Flag'] = ((s <= index) & (index <= e)).sum(axis=1)

start end Expected Flag
0 0 0 0
1 0 0 0
2 0 0 0
3 1 0 1
4 0 0 1
5 0 1 1
6 0 0 0
7 0 0 0
8 1 0 1
9 0 1 1
10 0 0 0

单行: ((df.start.nonzero()[0] <= df.index.values.reshape(-1,1)) & (df.index.values.reshape(-1,1) <= df.end.nonzero()[0])).sum(axis=1)

关于python - Pandas:标记另一列标志之间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52388933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com