我有一个包含两列的数据框。列是 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)
但是它也结合了单词和逗号,同时我只想结合数字和逗号
最佳答案
一个想法是在 ,
之前和之后使用测试数字来识别值,创建组并聚合 join
和 first
:
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/