在 Pandas Dataframe 中连接备用行(一个包含数据,一个包含一些 NaN)

Concatenate alternate rows (one with data, one with some NaN) in Pandas Dataframe

提问人:codelearnerallday 提问时间:9/22/2023 最后编辑:Shaidocodelearnerallday 更新时间:9/22/2023 访问量:25

问:

我有一个从 PDF 阅读器获取的数据帧,因此数据读取有点混乱。

A列 B列 C列 D列 E 列
美国广播公司 5 10 你好 美国广播公司
DEF的
GHI公司 25 30 再见 不。
JKL公司

我看到的数据帧类型的示例。A 列由字符串组成。每个备用行都包含一个用于 A 列的字符串,但所有其他列包含一个 NaN。

我想得到以下信息:

A列 B列 C列 D列 E 列
ABCDEF公司 5 10 你好 美国广播公司
吉吉克勒 25 30 再见 不。

我尝试每 2 行和 2 行隔离一次,但没有获得所需的输出。agg(sum)

python pandas 数据帧 字符串连接

评论


答:

0赞 mozway 9/22/2023 #1

使用自定义 groupby.agg 并假设 “Column B” 可用于标识组:

f = {col: ''.join if is_string_dtype(df[col]) else 'first'
     for col in df}
group = df['Column B'].notna().cumsum()

out = df.groupby(group, as_index=False).agg(f)

或者,在不缺少值的行上开始组:

group = df.notna().all(axis=1).cumsum()

或者,如果您确实有成对的行:

import numpy as np

group = np.arange(len(df))//2

输出:

  Column A  Column B  Column C Column D Column E
0   ABCDEF       5.0      10.0    Hello      ABC
1   GHIJKL      25.0      30.0      Bye      Lol