【问题标题】:How to combine numbers into a single row如何将数字组合成一行
【发布时间】:2020-12-25 13:21:10
【问题描述】:

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

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

【问题讨论】:

  • 请提供一些您尝试编写的代码以及您在其中遇到的问题
  • 您希望将所有数字/逗号合并成一行,还是只合并带有数字/逗号的连续行?
  • 创建dataframe之前最好先修改数据
  • @ShivamJha 我已经放了代码
  • @DerekO 仅连续行与数字/逗号/数字要合并

标签: python pandas numpy dataframe merge


【解决方案1】:

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

【讨论】:

  • 索引 0 中的单词:DNA 消失了
  • @winnie - 你能用.shift(fill_value=-1) 代替.shift() 吗?
  • 谢谢,解决了!但是还有一个问题,如果数字后面有一个单词,它也与数字结合,就像我在问题中描述的那样,我已经编辑了
  • 其实我只是想合并number+,+number,而不是全部number+,
  • @winnie - 你现在可以测试了吗?添加 3 个连续值的条件 number,number
猜你喜欢
  • 2014-10-12
  • 2020-12-26
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
相关资源
最近更新 更多