首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何转换每个列的每一行中包含列表的数据

如何转换每个列的每一行中包含列表的数据
EN

Stack Overflow用户
提问于 2019-02-07 15:05:43
回答 3查看 85关注 0票数 1

我有下面的dataframe,它是for循环的输出之一。

代码语言:javascript
复制
df = pd.DataFrame()

df['Score'] = [['0-0','1-1','2-2'],['0-0','1-1','2-2']]
df ['value'] =[[0.08,0.1,0.15],[0.07,0.12,0.06]]
df ['Team'] = ['A','B']

我希望将每一行列表中的每个元素转换为列的每个元素。以下是预期的输出。

有人能帮我把它改造吗?

谢谢,

泽普

EN

回答 3

Stack Overflow用户

发布于 2019-02-07 15:11:08

使用np.concatenate

代码语言:javascript
复制
import pandas as pd 
import numpy as np 

x = [['0-0','1-1','2-2'],['0-0','1-1','2-2']]
y = [[0.08,0.1,0.15],[0.07,0.12,0.06]]
z = ['A','B']
df = pd.DataFrame()

df['Score'] = np.concatenate(x)
df ['value'] = np.concatenate(y)
df['Team'] = np.repeat(z, len(df)/len(z))
print(df)

输出:

代码语言:javascript
复制
  Score  value Team                                                                                                                          
0   0-0   0.08    A                                                                                                                          
1   1-1   0.10    A                                                                                                                          
2   2-2   0.15    A                                                                                                                          
3   0-0   0.07    B                                                                                                                          
4   1-1   0.12    B                                                                                                                          
5   2-2   0.06    B   
票数 2
EN

Stack Overflow用户

发布于 2019-02-07 15:08:23

你首先需要把专家们弄平,你可以使用itertools.chain

代码语言:javascript
复制
from itertools import chain
score = list(chain(*[['0-0','1-1','2-2'],['0-0','1-1','2-2']]))
value = list(chain(*[[0.08,0.1,0.15],[0.07,0.12,0.06]]))

pd.DataFrame({'score':score, 'value':value})

Score  value
0   0-0   0.08
1   1-1   0.10
2   2-2   0.15
3   0-0   0.07
4   1-1   0.12
5   2-2   0.06
票数 1
EN

Stack Overflow用户

发布于 2019-02-07 15:09:21

您可以使用可迭代来扁平输入:

代码语言:javascript
复制
from itertools import chain

import pandas as pd

data = [['0-0','1-1','2-2'],['0-0','1-1','2-2']]
values = [[0.08,0.1,0.15],[0.07,0.12,0.06]]

df = pd.DataFrame(data=list(zip(chain.from_iterable(data), chain.from_iterable(values))), columns=['score', 'value'])
print(df)

输出

代码语言:javascript
复制
  score  value
0   0-0   0.08
1   1-1   0.10
2   2-2   0.15
3   0-0   0.07
4   1-1   0.12
5   2-2   0.06

作为另一种选择,您可以使用np.ravel

代码语言:javascript
复制
import numpy as np
import pandas as pd

data = [['0-0', '1-1', '2-2'], ['0-0', '1-1', '2-2']]
values = [[0.08, 0.1, 0.15], [0.07, 0.12, 0.06]]

df = pd.DataFrame({'score': np.array(data).ravel(), 'value': np.array(values).ravel()})
print(df)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54576302

复制
相关文章

相似问题

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