如何将Python Pandas数据框拆分并合并来自其他数据框的字符串?

huangapple go评论75阅读模式
英文:

How to explode Python Pandas Dataframe and merge strings from other dataframe?

问题

Dataframe1中有大量的数据行和列。其中一列是TextText列中的某些行包含字符串,其中一些字符串包含了{ExplodeEList2}

如何将Dataframe1中的这些特定行展开并将每个字符串中的{ExplodeEList2}替换为分开的数据框EList2['Name']中的每个名称?谢谢!我已经整天在尝试解决这个问题了。

Dataframe1

Text
不相关的数据
随机示例文本 {ExplodeElist2} 和更多随机示例文本。
其他不相关的数据

EList2

Name
Jack
Jon
Sally

我应该如何在Dataframe1中生成以下结果:

Text
不相关的数据
随机示例文本 Jack 和更多随机示例文本。
随机示例文本 Jon 和更多随机示例文本。
随机示例文本 Sally 和更多随机示例文本。
其他不相关的数据
英文:

Dataframe1 has a lot of rows and columns of data. One column is Text. Certain rows in Text column have strings and some strings include within the strings this {ExplodeEList2}

How to explode (expand) those specific rows of Dataframe1 and replace {ExplodeEList2} in each string with each name contained in the separate dataframe EList2['Name']? Thank you! I've been banging my head against my keyboard all day trying to solve this.

Dataframe1:

Text
Unrelated data
Random sample text {ExplodeElist2} and more random sample text.
Other unrelated data

EList2:

Name
Jack
Jon
Sally

How do I generate this in Dataframe1:

Text
Unrelated data
Random sample text Jack and more random sample text.
Random sample text Jon and more random sample text.
Random sample text Sally and more random sample text.
Other unrelated data

答案1

得分: 1

你可以使用 apply 来处理 DataFrame1 中包含字符串 ExplodeElist2 的所有 Text 值,将该字符串替换为一组替代值。然后,你可以使用 explode 来展开该列表:

mask = DataFrame1['Text'].str.contains('{ExplodeElist2}')
DataFrame1.loc[mask, 'Text'] = DataFrame1.loc[mask, 'Text'].apply(lambda s:
展开收缩
])
DataFrame1 = DataFrame1.explode('Text').reset_index(drop=True)

输出(针对你的示例数据):

                                                Text
0                                     无关数据
1  随机示例文本 Jack 和更多随机示例文本...
2  随机示例文本 Jon 和更多随机示例文本 ...
3  随机示例文本 Sally 和更多随机示例文本...
4                               其他无关数据
英文:

You can use apply to process all the Text values in DataFrame1 which contain the string ExplodeElist2, replacing the string with a list of replaced values. You can then explode that list:

mask = DataFrame1['Text'].str.contains('{ExplodeElist2}')
DataFrame1.loc[mask, 'Text'] = DataFrame1.loc[mask, 'Text'].apply(lambda s:
展开收缩
])
DataFrame1 = DataFrame1.explode('Text').reset_index(drop=True)

Output (for your sample data):

                                                Text
0                                     Unrelated data
1  Random sample text Jack and more random sample...
2  Random sample text Jon and more random sample ...
3  Random sample text Sally and more random sampl...
4                               Other unrelated data

huangapple
  • 本文由 发表于 2023年5月14日 09:08:37
  • 转载请务必保留本文链接:https://go.coder-hub.com/76245434.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定