python - 如何将数字组合成一行

标签 python pandas numpy dataframe merge

我有一个包含两列的数据框。列是 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

我想将一些包含数字的行与逗号 , number+,+number 合并到一行。所以输出应该是这样的:

                     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)

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

最佳答案

一个想法是在 , 之前和之后使用测试数字来识别值,创建组并聚合 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

关于python - 如何将数字组合成一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63772169/

相关文章:

python - 使用 MRMR 进行特征选择

python - 绘制 2 度线性回归的困难

python - 使用 einsum 在傅立叶域中实现 conv2d --> ValueError : einstein sum subscripts string contains too many subscripts for operand 0

python - 如何正确使用 mask_zero=True 进行预训练权重的 Keras 嵌入?

pandas - 将 geojson 文件下载到 jupyter 中的 folium 中

python - 如何防止聚合函数删除列?

python - 起始值和最小值/最大值之间的随机游走序列

python - 无法使用 __exit__ 方法创建mockito模拟

python - Collat​​z 猜想程序在高位随机停止准确

python - Pandas json_normalize 返回 KeyError