如何将数字合并成一行

2024-10-02 00:20:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有两列的数据框。列是Word和Tag。df如下所示:

                     Word   Tag
0                     DNA   O
1                       ,   O
2                  adalah   O
3                       )   X
4                       ,   Y
5                  ikatan   P
6                      10   O
7                       ,   O
8                       4   Q
9                pasangan   Q
10                   abad   A
11                     20   B
12                      ,   C
13              bersamaan   D

我想把一些包含带有逗号,{}的数字的行合并到一行。因此,输出应如下所示:

                     Word   Tag
0                     DNA   O
1                       ,   O
2                  adalah   O
3                       )   X
4                       ,   Y
5                  ikatan   P
6                    10,4   O
7                pasangan   Q
8                    abad   A
9                      20   B
10                      ,   C
11              bersamaan   D

有什么想法吗?提前谢谢

我试过:

coma = df['Word'].shift().ne(',').mul(df['Word'].ne(',')).cumsum()
new_df = df.groupby(coma, as_index=False).agg({'Word' : ''.join, 'Tag' : 'first'})
print(new_df)

但它也结合了单词和逗号,同时我只想结合数字和逗号


Tags: 数据dfnewtag数字dnawordne
1条回答
网友
1楼 · 发布于 2024-10-02 00:20:48

一个想法是在,前后使用测试数字来识别值,创建组并聚合joinfirst

m1 = df['Word'].str.isnumeric() & df['Word'].shift(-1).eq(',')
m2 = df['Word'].eq(',') & df['Word'].shift().str.isnumeric()

m3 = df['Word'].str.isnumeric() & df['Word'].shift().eq(',')
m4 = df['Word'].eq(',') & df['Word'].shift(-1).str.isnumeric()

m = (m1 | m2 | m3 | m4)
g = (~m).cumsum().where(m)

m5 = g.map(g.value_counts()) == 3
g1 = g.where(m5, np.arange(len(df)) + .5)

df1 = (df.groupby(g1, as_index=False)
          .agg({'Word': ''.join, 'Tag' :'first'}))
print(df1)
         Word Tag
0         DNA   O
1           ,   O
2      adalah   O
3           )   X
4           ,   Y
5      ikatan   P
6        10,4   O
7    pasangan   Q
8        abad   A
9          20   B
10          ,   C
11  bersamaan   D

相关问题 更多 >

    热门问题