我对Pandas的DataFrame对象有问题。
我已经读取了csv文件,并且有这样的DataFrame:
我想用符号“ |”连接行之间的行, 它应该看起来像这样:
具有类似Pandas的功能,以特定的分隔符连接行 或者我应该如何实现
答案 0 :(得分:0)
我假设感兴趣的列的名称为 txt 。
定义以下函数以连接组的内容 字段:
def concatRows(grp):
tt = grp[grp != '|'].to_list()
rv = ' '.join(tt)
return rv if len(rv) > 0 else None
在您的样本数据中,我注意到有关最后一行的“边缘情况”: 它包含一个空字符串,应丢弃 (而不是创建一个空行)。
要考虑到这一点,上述功能会检测到这种情况,然后 返回 None (稍后将进行实际删除)。
然后通过以下方式应用此功能:
df.groupby((df.txt == '|').cumsum()).txt.apply(concatRows).dropna()
请注意,(df.txt =='|')。cumsum()返回以下组:
因此 grp [grp!='|'] 删除了元素=='|' (如果有)。 然后 rv 包含联接结果。 但是,如果 rv 是空字符串,则会返回 None 。
然后,通过最终调用 dropna 删除所有 None 情况。
答案 1 :(得分:0)
如果您的列不太大,可以用它做成一个字符串,然后在'|'处分割它。最后,创建一系列新的结果列表。
se = pd.Series(['foo', 'foobar', '|', 'bar', '|', '|', 'alpha'])
print(se)
0 foo
1 foobar
2 |
3 bar
4 |
5 |
6 alpha
dtype: object
se = pd.Series(se.str.cat(sep=' ').split('|'))
se = se.loc[se.ne(' ')].reset_index(drop=True)
# with the last step you remove ' ' elements created from consecutive '|'s.
print(se)
0 foo foobar
1 bar
2 alpha
dtype: object
se 是DataFrame的列。