首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用多个值爆炸行

用多个值爆炸行
EN

Stack Overflow用户
提问于 2022-02-14 21:31:58
回答 2查看 355关注 0票数 0

我很抱歉重复之前回答过的同样的问题,但它们似乎并没有给我想要的结果,也许我错过了什么。

我有一个堆栈溢出数据集的子集,如下所示:

代码语言:javascript
复制
**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

我要输出如下所示:

代码语言:javascript
复制
**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

我尝试了以下方法:

  • 备选方案-1:
代码语言:javascript
复制
df.explode('tags')
  • 备选方案-2:
代码语言:javascript
复制
df.set_index(['time']).tags.apply(pd.Series).stack().reset_index(name = 'tags').drop('level_1', axis = 1)

在这两种情况下,我得到的输出与我的数据不爆炸。我在这里做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-14 21:43:54

熊猫博士pandas.DataFrame.explode

指定每个元素为str或tuple的非空列表。

要使用爆炸性标签,你的“标签”列需要是一个列表类型。应用函数将以逗号分隔的字符串标记转换为列表,然后使用选项1 df.explode('tags')

票数 0
EN

Stack Overflow用户

发布于 2022-02-14 21:44:43

实际上,从您问题的第一个版本(未经编辑),我想您需要的是使用iterrows对行进行循环。我想出的是以下内容(为了避免这个答案变得冗长,我只是复制了您的部分数据):

代码语言:javascript
复制
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

输出

代码语言:javascript
复制
|    | tags       |   time |
|---:|:-----------|-------:|
|  0 | #c         |     35 |
|  1 | windoforms |     35 |
|  2 | css        |     35 |
|  3 | #c         |     40 |
|  4 | datetime   |     40 |
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71118531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档