我很抱歉重复之前回答过的同样的问题,但它们似乎并没有给我想要的结果,也许我错过了什么。
我有一个堆栈溢出数据集的子集,如下所示:
**tags time**
c#,winforms 35
html,css,internet-explorer-7 855
c#,conversion,j# 472
c#,datetime 556
c#,.net,datetime,timespan 1
php,security 3
mysql 5
codeigniter,routes 4
c#,progressbar 4
.net,ide,linux,mono 2我要输出如下所示:
**tags time**
c# 35
winforms 35
html 855
css 855
internet-explorer-7 855
c# 472
conversion 472
j# 472
c# 556
datetime 556
c# 1
.net 1
datetime 1
timespan 1
php 3
security 3
mysql 5
codeigniter 4
routes 4
c# 4
progressbar 4
.net 2
ide 2
linux 2
mono 2我尝试了以下方法:
df.explode('tags')df.set_index(['time']).tags.apply(pd.Series).stack().reset_index(name = 'tags').drop('level_1', axis = 1)在这两种情况下,我得到的输出与我的数据不爆炸。我在这里做错什么了?
发布于 2022-02-14 21:43:54
指定每个元素为str或tuple的非空列表。
要使用爆炸性标签,你的“标签”列需要是一个列表类型。应用函数将以逗号分隔的字符串标记转换为列表,然后使用选项1 df.explode('tags')
发布于 2022-02-14 21:44:43
实际上,从您问题的第一个版本(未经编辑),我想您需要的是使用iterrows对行进行循环。我想出的是以下内容(为了避免这个答案变得冗长,我只是复制了您的部分数据):
import pandas as pd
dataframe = pd.DataFrame({"tags": ["#c,windoforms,css", "#c,datetime"], "time":[35,40]})
newTags = []
newTime = []
for index, row in dataframe.iterrows():
for name in row["tags"].split(","):
newTags.append(name)
newTime.append(row["time"])
resultDataframe = pd.DataFrame({"tags": newTags, "time":newTime})
resultDataframe输出
| | tags | time |
|---:|:-----------|-------:|
| 0 | #c | 35 |
| 1 | windoforms | 35 |
| 2 | css | 35 |
| 3 | #c | 40 |
| 4 | datetime | 40 |https://stackoverflow.com/questions/71118531
复制相似问题