我有这个数据框 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/