"扩大"通过使用包含单元格的列表来执行pandas数据帧

时间:2014-07-16 01:11:16

标签: python pandas dataframe

我有一个数据框,其中第三列是一个列表:

import pandas as pd 
pd.DataFrame([[1,2,['a','b','c']]])

我想将该嵌套分开并创建更多具有相同第一列和第二列值的行。 最终结果应该是:

pd.DataFrame([[[1,2,'a']],[[1,2,'b']],[[1,2,'c']]])

注意,这是一个简化的例子。实际上我有多行我想“扩展”。

关于我的进展,我不知道如何解决这个问题。好吧,我想我可以在考虑其他列值的同时获取嵌套列表的每个成员。然后我会使用list comprehension来制作更多列表。我会继续这样做并添加许多列表来创建一个新的数据帧......但这似乎有点过于复杂。更简单的解决方案呢?

2 个答案:

答案 0 :(得分:2)

使用单个列创建数据框,然后添加具有常量值的列:

import pandas as pd

df = pd.DataFrame({"data": ['a', 'b', 'c']})
df['col1'] = 1
df['col2'] = 2
print df

打印:

  data  col1  col2
0    a     1     2
1    b     1     2
2    c     1     2

答案 1 :(得分:1)

与OR描述的问题不完全相同,但是相关的 - 以及更多类似熊猫的 - 就是你有一个列表长度不一致的列表的情况。在这种情况下,您可以以长格式创建这样的DataFrame。

import pandas as pd

my_dict = {'a': [1,2,3,4], 'b': [2,3]}
df = pd.DataFrame.from_dict(my_dict, orient='index')
df = df.unstack() # to format it in long form
df = df.dropna() # to drop nan values which were generated by having lists of unequal length 
df.index = df.index.droplevel(level=0) # if you don't want to store the index in the list 
# NOTE this last step results duplicate indexes