gpt4 book ai didi

python - 根据相邻行单元格值合并行

转载 作者:行者123 更新时间:2023-12-01 00:58:13 25 4
gpt4 key购买 nike

我的 df 有时(并非总是)有空单元格的行,除了一个:

 |    A  |      B|    C|
0| white| one| 1|
1| | | 2|
2| blue | two| 3|
3| | | 4|
4| | | 5|
5| black| three| 6|
6| brown| four| 7|

我想要完成的是将具有空列“A”和“B”的行与上一行合并。输出应如下所示:

 |    A  |      B|     C|
0| white| one| 1 2|
2| blue | two| 3 4 5|
5| black| three| 6|
6| brown| four| 7|

可能的组合是:

  • 相邻行中没有空单元格(第 5、6 行)
  • 相邻行包含空单元格(第 0、1 行)
  • 多个相邻行包含空单元格(第 2 - 4 行)

当这是简单的情况时,每隔一行都有空单元格,我可以用这样的方法来管理它:

df.groupby(np.arange(len(df))//2).sum()

但我无法弄清楚其他/组合情况。

感谢您的帮助。

更新:

在尝试提供的解决方案 df 后发现也有这样的情况:

 |      A|    B|    C
0| white| one| 1
1| | | 2
2| white| one| 3
3| | | 4
4| | | 5
5| white| one| 6
6| white| one| 7

根据此类数据提供的解决方案给出以下结果:

 |      A|    B|       C
0| | | 2 4 5
1| white| one| 1 3 6 7

虽然预期应该是这样的:

 |      A|    B|    C
0| white| one| 1 2
2| white| one|3 4 5
5| white| one| 6
6| white| one| 7

最佳答案

使用类似的东西:

df.groupby(df.A.ffill()).agg({'B':'first','C':lambda x: ','.join(map(str,x))}).reset_index()

更好(感谢@piRSquared):

df.astype({'C': str}).ffill().groupby(['A', 'B']).C.apply(' '.join).reset_index()
<小时/>

如果要保留原始 df 的顺序,请尝试:

m=df.groupby(df.A.ffill()).agg({'B':'first','C':lambda x: ','.join(map(str,x))}).\
reindex(df.A.dropna().unique())
m=m.reset_index()
print(m)
<小时/>
       A      B      C
0 white one 1,2
1 blue two 3,4,5
2 black three 6
3 brown four 7

注意在执行此操作之前将空格替换为 np.nan

编辑:

根据您的更新,您可以执行以下操作:

df=df.replace(r'^\s*$', np.nan, regex=True) #to replace whitespaces to NaN(optional)
new_df=(df.astype({'C': str}).groupby(df['A'].notnull().cumsum())
.agg({'A':'first','B':'first','C':' '.join}).reset_index(drop=True))
print(new_df)
<小时/>
         A      B      C
0 white one 1 2
1 white one 3 4 5
2 white one 6
3 white one 7

关于python - 根据相邻行单元格值合并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56061320/

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