gpt4 book ai didi

python - 根据另一列的条件从一列的多个连续行聚合字符串数据

转载 作者:太空宇宙 更新时间:2023-11-04 11:20:12 24 4
gpt4 key购买 nike

我有一个像这样的 DataFrame:

data = {'col1': ['A', 'B', 'B', 'A', 'B', 'C', 'B', 'B', 'B', 
'A', 'C', 'A', 'B', 'C'],
'col2': ['NaN', 'comment1', 'comment2', 'NaN', 'comment3', NaN,
'comment4', 'comment5', 'comment6',
'NaN', 'NaN', 'NaN', 'comment7', 'NaN]}

frame = pd.DataFrame(data)
frame

col1 col2
A NaN
B comment1
B comment2
A NaN
B comment3
C NaN
B comment4
B comment5
B comment6
A NaN
C NaN
A NaN
B comment7
C NaN

col1 == 'B' 的每一行都有一个注释,它将是一个字符串。我需要聚合评论并用生成的聚合字符串填充前一行(其中 col1 != 'B')。

col1 != 'B' 的任何给定行都可能没有、一个或多个对应的注释行 (col1 == 'B'),这似乎是问题的症结所在。我不能只使用 fillna('bfill') 等。

我研究了 iterrows()、groupby() 和 while 循环并尝试构建我自己的函数。但是,我不认为我完全理解所有这些是如何工作的。

成品应该是这样的:

col1    col2
A comment1 + comment2
B comment1
B comment2
A comment3
B comment3
C comment4 + comment5 + comment6
B comment4
B comment5
B comment6
A NaN
C NaN
A comment7
B comment7
C NaN

最终我将删除所有 col1 == 'B' 的行,但现在我想保留它们以供验证。

最佳答案

下面是使用 GroupBy 和自定义石斑鱼来连接 col1B 的字符串的一种方法:

where_a = frame.col1.ne('B') 
g = where_a.cumsum()
com = frame[frame.col1.eq('B')].groupby(g).col2.agg(lambda x: x.str.cat(sep=' + '))
till = (frame.col2.isna() & frame.col2.shift(-1).notna())[::-1].idxmax()
ixs = where_a[:till+1].reindex(frame.index).fillna(False)
frame.loc[ixs, 'col2'] = com.values

print(frame)

col1 col2
0 A comment1 + comment2
1 B comment1
2 B comment2
3 A comment3
4 B comment3
5 C comment4 + comment5 + comment6
6 B comment4
7 B comment5
8 B comment6
9 A NaN
10 C NaN

关于python - 根据另一列的条件从一列的多个连续行聚合字符串数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56153666/

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