我有这个数据框 df :

columnId     column2                                                                  column3    countsOfWord
id1          hogedijk klarenbeek                                                       2016        2
id2          hogedijk klarenbeek zuidoost hogedijk klarenbeek zuidoost                 2012        6
id3          zuidoost clouds                                                           2010        2
id4          artzuid zuidoost hogedijk klarenbeek zuidoost clouds hogedijk klarenbeek  2019        8

我迫切需要将 countsOfWords 高于 2 倍 的行(例如 id2 id4 拆分为相等的部分,以便 的列只包含这些 行的两个单词alter_ojitOf column3 。我的 df 数据框如下所示:
columnId     column2                                                                  column3    countsOfWord
id1          hogedijk klarenbeek                                                       2016        2
id2          hogedijk klarenbeek                                                       2012        2
id2          zuidoost hogedijk                                                         2012        2
id2          klarenbeek zuidoost                                                       2012        2
id3          zuidoost clouds                                                           2010        2
id4          artzuid zuidoost                                                          2019        2
id4          hogedijk klarenbeek                                                       2019        2
id4          zuidoost clouds                                                           2019        2
id4          hogedijk klarenbeek                                                       2019        2

任何人都可以帮助我吗?

我试过这段代码,但它不会自动用于 countsOfWords 高于 2 次 :
df['column2'].iloc[1][0:len(df['column2'].iloc[0])//2]

最佳答案

IIUC 我们做 explode 然后 cumcount 将组拆分为子组

s=df.assign(column2=df.column2.str.split(' ')).explode('column2')

s=s.groupby([s.columnId,s.groupby('columnId').cumcount()//2]).\
        agg({'columnId':'first','column2':' '.join,'column3':'first','countsOfWord':'first'})
s=s.assign(countsOfWord=2).reset_index(drop=True)
s
  columnId              column2  column3  countsOfWord
0      id1  hogedijk klarenbeek     2016             2
1      id2  hogedijk klarenbeek     2012             2
2      id2    zuidoost hogedijk     2012             2
3      id2  klarenbeek zuidoost     2012             2
4      id3      zuidoost clouds     2010             2
5      id4     artzuid zuidoost     2019             2
6      id4  hogedijk klarenbeek     2019             2
7      id4      zuidoost clouds     2019             2
8      id4  hogedijk klarenbeek     2019             2

findall + explode
df.assign(column2=df.column2.str.replace(' ','-').str.findall("-".join(["[^-]+"] * 2))).explode('column2')
  columnId              column2  column3  countsOfWord
0      id1  hogedijk-klarenbeek     2016             2
1      id2  hogedijk-klarenbeek     2012             6
1      id2    zuidoost-hogedijk     2012             6
1      id2  klarenbeek-zuidoost     2012             6
2      id3      zuidoost-clouds     2010             2
3      id4     artzuid-zuidoost     2019             8
3      id4  hogedijk-klarenbeek     2019             8
3      id4      zuidoost-clouds     2019             8
3      id4  hogedijk-klarenbeek     2019             8

关于python - 根据另一列Python的特定值将一行中的单词拆分为几行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59899234/

10-11 17:06