2014-07-16 60 views
1

熊貓數據幀我有一個數據幀,其中第三列是一個列表:「擴大」通過使用包含細胞列表

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

我想分離該巢並創建具有第一相同值,並且更多的行第二列。 最終的結果應該是這樣的:

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

注意,這是簡化的例子。實際上,我有多行,我想「擴大」。

關於我的進展,我不知道如何解決這個問題。那麼,我想我可以帶着嵌套列表的每個成員,同時記住其他列值。然後我會使用列表理解來製作更多列表。我會繼續這麼做,並添加許多列表來創建一個新的數據框......但這似乎有點太複雜。更簡單的解決方案呢?

回答

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

不完全一樣的問題的發現和描述,但相關的 - 和更類似熊貓的情況是,你有一份列表不同長度列表的列表。在這種情況下,您可以使用長格式創建一個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