gpt4 book ai didi

python - 根据条件连接列值

转载 作者:太空宇宙 更新时间:2023-11-03 14:01:59 25 4
gpt4 key购买 nike

这段代码:

import numpy as np
import pandas as pd

df = pd.DataFrame(['a1', 'a2', 'stop', 'a4', 'a4', 'a5', 'stop', 'a3'],
columns=['c'])

呈现:

      c
0 a1
1 a2
2 stop
3 a4
4 a4
5 a5
6 stop
7 a3

我正在尝试生成以下数据框,其中一列中的值被连接起来,直到遇到“停止”值:

columns = ['c1' , 'c2']
data = np.array([['a1, a2','stop'] , ['a4, a4, a5','stop']])
df = pd.DataFrame(data, columns=columns)
df

c1 c2
0 a1, a2 stop
1 a4, a4, a5 stop

这是一种有效的方法吗,过滤列值为“stop”的行:

df[df['c'] == 'stop']

然后访问前面的行?

最佳答案

首先,通过测试 c 是否等于“stop”来创建一个 bool 掩码:

>>> df = pd.DataFrame(['a1', 'a2', 'stop', 'a3', 'a4', 'a5', 'stop', 'a6'],
columns=['c'])
>>> mask = df['c'].eq('stop')

您还指定要忽略最终停止后的值。截断两个系列:

>>> stop = mask[::-1].idxmax()
>>> mask = mask[:stop]
>>> c = df['c'][:stop].copy()

现在分组:

>>> c.groupby(mask.cumsum()).apply(lambda s: s[s!='stop'].tolist())
c
0 [a1, a2]
1 [a4, a4, a5]

对于累积和,True 映射到 1,False 映射到 0。这用作分组。

脚注 - 无论系列中的最终值是否以 stop 结束,此逻辑都应该有效。

关于python - 根据条件连接列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48373687/

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