Pandas DataFrame中的连接行

问题描述 投票:0回答:2

我对Pandas的DataFrame对象有问题。

我已经读取了csv文件,并且具有这样的DataFrame:

enter image description here

我想将带有符号'|'的行之间的行连接起来,它应该看起来像这样:

enter image description here

具有类似Pandas的功能,以特定的分隔符连接行或我应该如何实现

python pandas dataframe
2个回答
0
投票

我假设关注的列的名称为txt

定义以下功能以连接组的内容字段:

def concatRows(grp):
    tt = grp[grp != '|'].to_list()
    rv = ' '.join(tt)
    return rv if len(rv) > 0 else None

在您的样本数据中,我注意到有关最后一行的“边缘情况”:它包含一个空字符串,应为discarded(而不是创建一个空行)。

要考虑到这一点,上述功能会检测到这种情况,然后返回None(稍后将进行实际删除)。

然后通过以下方式应用此功能:

df.groupby((df.txt == '|').cumsum()).txt.apply(concatRows).dropna()

注意(df.txt =='|')。cumsum()返回以下组:

  • 组1-索引为0-2的行(没有任何'|')。
  • 第2组-索引为3-7的行(以'|'开头)。
  • 依此类推。

所以grp [grp!='|']删除元素=='|' (如果有)。然后rv包含联接结果。但是,如果rv空字符串,则会返回None

然后,对dropna的最终调用将删除任何情况[


0
投票
如果您的列不太大,可以用它做成一个字符串,然后在'|'处将其分割。最后,创建一系列新的结果列表。

se = pd.Series(se.str.cat(sep=' ') \ # make the space separated string .split('|')) \ # split it at '|' .loc[sa.ne(' ')] \ # ' ' created from sequential '|'s .reset_index(drop=True)

其中

se是DataFrame的列。

© www.soinside.com 2019 - 2024. All rights reserved.