gpt4 book ai didi

python - 如何合并列为 NaN 的连续行

转载 作者:行者123 更新时间:2023-11-28 20:57:02 32 4
gpt4 key购买 nike

我有这样的数据,它让我发疯。源是我用 tabula 阅读的 pdf 文件提取表。问题是表格的某些行在文档中是多行的,这就是我看到输出的方式。

> sub_df.iloc[85:95]
1 Acronym Meaning
86 ABC Aaaaa Bbbbb Ccccc
87 CDE Ccccc Ddddd Eeeee
88 NaN Fffff Ggggg
89 FGH NaN
90 NaN Hhhhh
91 IJK Iiiii Jjjjj Kkkkk
92 LMN Lllll Mmmmm Nnnnn
93 OPQ Ooooo Ppppp Qqqqq
94 RST Rrrrr Sssss Ttttt
95 UVZ Uuuuu Vvvvv Zzzzz

我想得到的是这样的。

> sub_df.iloc[85:95]
1 Acronym Meaning
86 ABC Aaaaa Bbbbb Ccccc
87 CDE Ccccc Ddddd Eeeee
88 FGH Fffff Ggggg Hhhhh
91 IJK Iiiii Jjjjj Kkkkk
92 LMN Lllll Mmmmm Nnnnn
93 OPQ Ooooo Ppppp Qqqqq
94 RST Rrrrr Sssss Ttttt
95 UVZ Uuuuu Vvvvv Zzzzz

我正在为 combine_first 苦苦挣扎像这样:

sub_df.iloc[[88]].combine_first(sub_df.iloc[[87]])

但结果不是我所期望的。

也是 groupby 的解决方案将不胜感激。

注意:索引不重要,可以重新设置。我只想连接一些列为 NaN 的连续行,然后将其转储到 csv,所以我不需要它们。

最佳答案

这是一个非常棘手的问题,ffillbfill 都不能解决这个问题

s1=(~(df.Acronym.isnull()|df.Meaning.isnull())) # create the group
s=s1.astype(int).diff().ne(0).cumsum() # create the group for each bad line it will assign the single id
bad=df[~s1]# we just only change the bad one
good=df[s1]# keep the good one no change


bad=bad.groupby(s.loc[bad.index]).agg({'1':'first','Acronym':'first','Meaning':lambda x : ''.join(x[x.notnull()])})


pd.concat([good,bad]).sort_index()
Out[107]:
1 Acronym Meaning
0 86 ABC Aaaaa Bbbbb Ccccc
1 87 CDE Ccccc Ddddd Eeeee
2 88 FGH Fffff Ggggg Hhhhh
5 91 IJK Iiiii Jjjjj Kkkkk
6 92 LMN Lllll Mmmmm Nnnnn
7 93 OPQ Ooooo Ppppp Qqqqq
8 94 RST Rrrrr Sssss Ttttt
9 95 UVZ Uuuuu Vvvvv Zzzzz

关于python - 如何合并列为 NaN 的连续行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53853085/

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