Python Pandas Expand a Column of List of Lists to Two New ColumnPandas split column of lists into multiple columnsFinding the index of an item given a list containing it in PythonConvert two lists into a dictionary in PythonPython join: why is it string.join(list) instead of list.join(string)?Getting the last element of a list in PythonHow do I get the number of elements in a list in Python?How do I concatenate two lists in Python?Renaming columns in pandasAdding new column to existing DataFrame in Python pandasDelete column from pandas DataFrame by column nameSelect rows from a DataFrame based on values in a column in pandas
How does noise-cancellation work in Mac laptops?
Bishop Berkeley's ideas put to the test
What happens if a creature that would fight isn't on the battlefield anymore?
Does kinetic energy warp spacetime?
Anatomically Correct Carnivorous Tree
Drawing lines to nearest point
Light Switch Terminals
Exception propagation: When should I catch exceptions?
Can the sorting of a list be verified without comparing neighbors?
What is Plautus’s pun about frustum and frustrum?
When a land becomes a creature, is it untapped?
Python Pandas Expand a Column of List of Lists to Two New Column
What does "Ich wusste, dass aus dir mal was wird" mean?
What does a comma mean inside an 'if' statement?
How to minimise the cost of guessing a number in a high/low guess game?
Why was Thor doubtful about his worthiness to Mjolnir?
Can I use my laptop, which says 100-240V, in the USA?
Why was castling bad for white in this game, and engine strongly prefered trading queens?
51% attack - apparently very easy? refering to CZ's "rollback btc chain" - How to make sure such corruptible scenario can never happen so easily?
Word for being out at night during curfew
As programers say: Strive to be lazy
What is the best way for a skeleton to impersonate human without using magic?
How can a Lich look like a human without magic?
How can I answer high-school writing prompts without sounding weird and fake?
Python Pandas Expand a Column of List of Lists to Two New Column
Pandas split column of lists into multiple columnsFinding the index of an item given a list containing it in PythonConvert two lists into a dictionary in PythonPython join: why is it string.join(list) instead of list.join(string)?Getting the last element of a list in PythonHow do I get the number of elements in a list in Python?How do I concatenate two lists in Python?Renaming columns in pandasAdding new column to existing DataFrame in Python pandasDelete column from pandas DataFrame by column nameSelect rows from a DataFrame based on values in a column in pandas
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I have a DF which looks like this.
name id apps
john 1 [[app1, v1], [app2, v2], [app3,v3]]
smith 2 [[app1, v1], [app4, v4]]
I want to expand the apps column such that it looks like this.
name id app_name app_version
john 1 app1 v1
john 1 app2 v2
john 1 app3 v3
smith 2 app1 v1
smith 2 app4 v4
Any help is appreciated
python pandas list
add a comment |
I have a DF which looks like this.
name id apps
john 1 [[app1, v1], [app2, v2], [app3,v3]]
smith 2 [[app1, v1], [app4, v4]]
I want to expand the apps column such that it looks like this.
name id app_name app_version
john 1 app1 v1
john 1 app2 v2
john 1 app3 v3
smith 2 app1 v1
smith 2 app4 v4
Any help is appreciated
python pandas list
add a comment |
I have a DF which looks like this.
name id apps
john 1 [[app1, v1], [app2, v2], [app3,v3]]
smith 2 [[app1, v1], [app4, v4]]
I want to expand the apps column such that it looks like this.
name id app_name app_version
john 1 app1 v1
john 1 app2 v2
john 1 app3 v3
smith 2 app1 v1
smith 2 app4 v4
Any help is appreciated
python pandas list
I have a DF which looks like this.
name id apps
john 1 [[app1, v1], [app2, v2], [app3,v3]]
smith 2 [[app1, v1], [app4, v4]]
I want to expand the apps column such that it looks like this.
name id app_name app_version
john 1 app1 v1
john 1 app2 v2
john 1 app3 v3
smith 2 app1 v1
smith 2 app4 v4
Any help is appreciated
python pandas list
python pandas list
asked 3 hours ago
ImsaImsa
392424
392424
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
You can .apply(pd.Series)
twice to get what you need as an intermediate step, then merge back to the original dataframe.
import pandas as pd
df = pd.DataFrame(
'name': ['john', 'smith'],
'id': [1, 2],
'apps': [[['app1', 'v1'], ['app2', 'v2'], ['app3','v3']],
[['app1', 'v1'], ['app4', 'v4']]]
)
dftmp = df.apps.apply(pd.Series).T.melt().dropna()
dfapp = (dftmp.value
.apply(pd.Series)
.set_index(dftmp.variable)
.rename(columns=0:'app_name', 1:'app_version')
)
df[['name', 'id']].merge(dfapp, left_index=True, right_index=True)
# returns:
name id app_name app_version
0 john 1 app1 v1
0 john 1 app2 v2
0 john 1 app3 v3
1 smith 2 app1 v1
1 smith 2 app4 v4
Instead of.apply(pd.Series)
(which is awfully slow), usepd.DataFrame(df.apps.tolist())
– RafaelC
1 hour ago
Either way you are pulling it out of the C-backed API into Python..apply
hides afor
loop, whiletolist
pushes the encapsulated object back to Python. I have not done any tests to see which is faster.
– James
1 hour ago
I have, that's why I commented.
– RafaelC
47 mins ago
Can also refer here for details
– RafaelC
46 mins ago
1
Wow, thanks. That is like 30% faster.
– James
44 mins ago
|
show 2 more comments
You can always have a brute force solution. Something like:
name, id, app_name, app_version = [], [], [], []
for i in range(len(df)):
for v in df.loc[i,'apps']:
app_name.append(v[0])
app_version.append(v[1])
name.append(df.loc[i, 'name'])
id.append(df.loc[i, 'id'])
df = pd.DataFrame('name': name, 'id': id, 'app_name': app_name, 'app_version': app_version)
will do the work.
Note that I assumed df['apps'] is lists of strings if df['apps'] is strings then you need: eval(df.loc[i,'apps'])
instead of df.loc[i,'apps']
Even though this works, it is probably unfeasible for large data frames. In pandas, one for loop is already bad enough, so imagine two nested for loops ;} Always try to avoid direct iteration !
– RafaelC
1 hour ago
add a comment |
My suggestion (there may be easier ways) is using DataFrame.apply
alongside pd.concat
:
import pandas as pd
def expand_row(row):
apps = row.apps
apps_names = [app[0] for app in apps]
apps_versions = [app[1] for app in apps]
return pd.DataFrame(
'name': row.name,
'id': row.id,
'app_name': apps_names,
'app_version': apps_versions
)
df = pd.DataFrame(
'name': ['john', 'smith'],
'id': [1, 2],
'apps': [[['app1', 'v1'], ['app2', 'v2'], ['app3','v3']],
[['app1', 'v1'], ['app4', 'v4']]]
)
temp_dfs = df.apply(expand_row, axis=1).tolist()
expanded = pd.concat(temp_dfs)
print(expanded)
# name id app_name app_version
# 0 0 1 app1 v1
# 1 0 1 app2 v2
# 2 0 1 app3 v3
# 0 1 2 app1 v1
# 1 1 2 app4 v4
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f56095142%2fpython-pandas-expand-a-column-of-list-of-lists-to-two-new-column%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can .apply(pd.Series)
twice to get what you need as an intermediate step, then merge back to the original dataframe.
import pandas as pd
df = pd.DataFrame(
'name': ['john', 'smith'],
'id': [1, 2],
'apps': [[['app1', 'v1'], ['app2', 'v2'], ['app3','v3']],
[['app1', 'v1'], ['app4', 'v4']]]
)
dftmp = df.apps.apply(pd.Series).T.melt().dropna()
dfapp = (dftmp.value
.apply(pd.Series)
.set_index(dftmp.variable)
.rename(columns=0:'app_name', 1:'app_version')
)
df[['name', 'id']].merge(dfapp, left_index=True, right_index=True)
# returns:
name id app_name app_version
0 john 1 app1 v1
0 john 1 app2 v2
0 john 1 app3 v3
1 smith 2 app1 v1
1 smith 2 app4 v4
Instead of.apply(pd.Series)
(which is awfully slow), usepd.DataFrame(df.apps.tolist())
– RafaelC
1 hour ago
Either way you are pulling it out of the C-backed API into Python..apply
hides afor
loop, whiletolist
pushes the encapsulated object back to Python. I have not done any tests to see which is faster.
– James
1 hour ago
I have, that's why I commented.
– RafaelC
47 mins ago
Can also refer here for details
– RafaelC
46 mins ago
1
Wow, thanks. That is like 30% faster.
– James
44 mins ago
|
show 2 more comments
You can .apply(pd.Series)
twice to get what you need as an intermediate step, then merge back to the original dataframe.
import pandas as pd
df = pd.DataFrame(
'name': ['john', 'smith'],
'id': [1, 2],
'apps': [[['app1', 'v1'], ['app2', 'v2'], ['app3','v3']],
[['app1', 'v1'], ['app4', 'v4']]]
)
dftmp = df.apps.apply(pd.Series).T.melt().dropna()
dfapp = (dftmp.value
.apply(pd.Series)
.set_index(dftmp.variable)
.rename(columns=0:'app_name', 1:'app_version')
)
df[['name', 'id']].merge(dfapp, left_index=True, right_index=True)
# returns:
name id app_name app_version
0 john 1 app1 v1
0 john 1 app2 v2
0 john 1 app3 v3
1 smith 2 app1 v1
1 smith 2 app4 v4
Instead of.apply(pd.Series)
(which is awfully slow), usepd.DataFrame(df.apps.tolist())
– RafaelC
1 hour ago
Either way you are pulling it out of the C-backed API into Python..apply
hides afor
loop, whiletolist
pushes the encapsulated object back to Python. I have not done any tests to see which is faster.
– James
1 hour ago
I have, that's why I commented.
– RafaelC
47 mins ago
Can also refer here for details
– RafaelC
46 mins ago
1
Wow, thanks. That is like 30% faster.
– James
44 mins ago
|
show 2 more comments
You can .apply(pd.Series)
twice to get what you need as an intermediate step, then merge back to the original dataframe.
import pandas as pd
df = pd.DataFrame(
'name': ['john', 'smith'],
'id': [1, 2],
'apps': [[['app1', 'v1'], ['app2', 'v2'], ['app3','v3']],
[['app1', 'v1'], ['app4', 'v4']]]
)
dftmp = df.apps.apply(pd.Series).T.melt().dropna()
dfapp = (dftmp.value
.apply(pd.Series)
.set_index(dftmp.variable)
.rename(columns=0:'app_name', 1:'app_version')
)
df[['name', 'id']].merge(dfapp, left_index=True, right_index=True)
# returns:
name id app_name app_version
0 john 1 app1 v1
0 john 1 app2 v2
0 john 1 app3 v3
1 smith 2 app1 v1
1 smith 2 app4 v4
You can .apply(pd.Series)
twice to get what you need as an intermediate step, then merge back to the original dataframe.
import pandas as pd
df = pd.DataFrame(
'name': ['john', 'smith'],
'id': [1, 2],
'apps': [[['app1', 'v1'], ['app2', 'v2'], ['app3','v3']],
[['app1', 'v1'], ['app4', 'v4']]]
)
dftmp = df.apps.apply(pd.Series).T.melt().dropna()
dfapp = (dftmp.value
.apply(pd.Series)
.set_index(dftmp.variable)
.rename(columns=0:'app_name', 1:'app_version')
)
df[['name', 'id']].merge(dfapp, left_index=True, right_index=True)
# returns:
name id app_name app_version
0 john 1 app1 v1
0 john 1 app2 v2
0 john 1 app3 v3
1 smith 2 app1 v1
1 smith 2 app4 v4
answered 2 hours ago
JamesJames
14.4k11733
14.4k11733
Instead of.apply(pd.Series)
(which is awfully slow), usepd.DataFrame(df.apps.tolist())
– RafaelC
1 hour ago
Either way you are pulling it out of the C-backed API into Python..apply
hides afor
loop, whiletolist
pushes the encapsulated object back to Python. I have not done any tests to see which is faster.
– James
1 hour ago
I have, that's why I commented.
– RafaelC
47 mins ago
Can also refer here for details
– RafaelC
46 mins ago
1
Wow, thanks. That is like 30% faster.
– James
44 mins ago
|
show 2 more comments
Instead of.apply(pd.Series)
(which is awfully slow), usepd.DataFrame(df.apps.tolist())
– RafaelC
1 hour ago
Either way you are pulling it out of the C-backed API into Python..apply
hides afor
loop, whiletolist
pushes the encapsulated object back to Python. I have not done any tests to see which is faster.
– James
1 hour ago
I have, that's why I commented.
– RafaelC
47 mins ago
Can also refer here for details
– RafaelC
46 mins ago
1
Wow, thanks. That is like 30% faster.
– James
44 mins ago
Instead of
.apply(pd.Series)
(which is awfully slow), use pd.DataFrame(df.apps.tolist())
– RafaelC
1 hour ago
Instead of
.apply(pd.Series)
(which is awfully slow), use pd.DataFrame(df.apps.tolist())
– RafaelC
1 hour ago
Either way you are pulling it out of the C-backed API into Python.
.apply
hides a for
loop, while tolist
pushes the encapsulated object back to Python. I have not done any tests to see which is faster.– James
1 hour ago
Either way you are pulling it out of the C-backed API into Python.
.apply
hides a for
loop, while tolist
pushes the encapsulated object back to Python. I have not done any tests to see which is faster.– James
1 hour ago
I have, that's why I commented.
– RafaelC
47 mins ago
I have, that's why I commented.
– RafaelC
47 mins ago
Can also refer here for details
– RafaelC
46 mins ago
Can also refer here for details
– RafaelC
46 mins ago
1
1
Wow, thanks. That is like 30% faster.
– James
44 mins ago
Wow, thanks. That is like 30% faster.
– James
44 mins ago
|
show 2 more comments
You can always have a brute force solution. Something like:
name, id, app_name, app_version = [], [], [], []
for i in range(len(df)):
for v in df.loc[i,'apps']:
app_name.append(v[0])
app_version.append(v[1])
name.append(df.loc[i, 'name'])
id.append(df.loc[i, 'id'])
df = pd.DataFrame('name': name, 'id': id, 'app_name': app_name, 'app_version': app_version)
will do the work.
Note that I assumed df['apps'] is lists of strings if df['apps'] is strings then you need: eval(df.loc[i,'apps'])
instead of df.loc[i,'apps']
Even though this works, it is probably unfeasible for large data frames. In pandas, one for loop is already bad enough, so imagine two nested for loops ;} Always try to avoid direct iteration !
– RafaelC
1 hour ago
add a comment |
You can always have a brute force solution. Something like:
name, id, app_name, app_version = [], [], [], []
for i in range(len(df)):
for v in df.loc[i,'apps']:
app_name.append(v[0])
app_version.append(v[1])
name.append(df.loc[i, 'name'])
id.append(df.loc[i, 'id'])
df = pd.DataFrame('name': name, 'id': id, 'app_name': app_name, 'app_version': app_version)
will do the work.
Note that I assumed df['apps'] is lists of strings if df['apps'] is strings then you need: eval(df.loc[i,'apps'])
instead of df.loc[i,'apps']
Even though this works, it is probably unfeasible for large data frames. In pandas, one for loop is already bad enough, so imagine two nested for loops ;} Always try to avoid direct iteration !
– RafaelC
1 hour ago
add a comment |
You can always have a brute force solution. Something like:
name, id, app_name, app_version = [], [], [], []
for i in range(len(df)):
for v in df.loc[i,'apps']:
app_name.append(v[0])
app_version.append(v[1])
name.append(df.loc[i, 'name'])
id.append(df.loc[i, 'id'])
df = pd.DataFrame('name': name, 'id': id, 'app_name': app_name, 'app_version': app_version)
will do the work.
Note that I assumed df['apps'] is lists of strings if df['apps'] is strings then you need: eval(df.loc[i,'apps'])
instead of df.loc[i,'apps']
You can always have a brute force solution. Something like:
name, id, app_name, app_version = [], [], [], []
for i in range(len(df)):
for v in df.loc[i,'apps']:
app_name.append(v[0])
app_version.append(v[1])
name.append(df.loc[i, 'name'])
id.append(df.loc[i, 'id'])
df = pd.DataFrame('name': name, 'id': id, 'app_name': app_name, 'app_version': app_version)
will do the work.
Note that I assumed df['apps'] is lists of strings if df['apps'] is strings then you need: eval(df.loc[i,'apps'])
instead of df.loc[i,'apps']
edited 1 hour ago
answered 2 hours ago
MaPyMaPy
16726
16726
Even though this works, it is probably unfeasible for large data frames. In pandas, one for loop is already bad enough, so imagine two nested for loops ;} Always try to avoid direct iteration !
– RafaelC
1 hour ago
add a comment |
Even though this works, it is probably unfeasible for large data frames. In pandas, one for loop is already bad enough, so imagine two nested for loops ;} Always try to avoid direct iteration !
– RafaelC
1 hour ago
Even though this works, it is probably unfeasible for large data frames. In pandas, one for loop is already bad enough, so imagine two nested for loops ;} Always try to avoid direct iteration !
– RafaelC
1 hour ago
Even though this works, it is probably unfeasible for large data frames. In pandas, one for loop is already bad enough, so imagine two nested for loops ;} Always try to avoid direct iteration !
– RafaelC
1 hour ago
add a comment |
My suggestion (there may be easier ways) is using DataFrame.apply
alongside pd.concat
:
import pandas as pd
def expand_row(row):
apps = row.apps
apps_names = [app[0] for app in apps]
apps_versions = [app[1] for app in apps]
return pd.DataFrame(
'name': row.name,
'id': row.id,
'app_name': apps_names,
'app_version': apps_versions
)
df = pd.DataFrame(
'name': ['john', 'smith'],
'id': [1, 2],
'apps': [[['app1', 'v1'], ['app2', 'v2'], ['app3','v3']],
[['app1', 'v1'], ['app4', 'v4']]]
)
temp_dfs = df.apply(expand_row, axis=1).tolist()
expanded = pd.concat(temp_dfs)
print(expanded)
# name id app_name app_version
# 0 0 1 app1 v1
# 1 0 1 app2 v2
# 2 0 1 app3 v3
# 0 1 2 app1 v1
# 1 1 2 app4 v4
add a comment |
My suggestion (there may be easier ways) is using DataFrame.apply
alongside pd.concat
:
import pandas as pd
def expand_row(row):
apps = row.apps
apps_names = [app[0] for app in apps]
apps_versions = [app[1] for app in apps]
return pd.DataFrame(
'name': row.name,
'id': row.id,
'app_name': apps_names,
'app_version': apps_versions
)
df = pd.DataFrame(
'name': ['john', 'smith'],
'id': [1, 2],
'apps': [[['app1', 'v1'], ['app2', 'v2'], ['app3','v3']],
[['app1', 'v1'], ['app4', 'v4']]]
)
temp_dfs = df.apply(expand_row, axis=1).tolist()
expanded = pd.concat(temp_dfs)
print(expanded)
# name id app_name app_version
# 0 0 1 app1 v1
# 1 0 1 app2 v2
# 2 0 1 app3 v3
# 0 1 2 app1 v1
# 1 1 2 app4 v4
add a comment |
My suggestion (there may be easier ways) is using DataFrame.apply
alongside pd.concat
:
import pandas as pd
def expand_row(row):
apps = row.apps
apps_names = [app[0] for app in apps]
apps_versions = [app[1] for app in apps]
return pd.DataFrame(
'name': row.name,
'id': row.id,
'app_name': apps_names,
'app_version': apps_versions
)
df = pd.DataFrame(
'name': ['john', 'smith'],
'id': [1, 2],
'apps': [[['app1', 'v1'], ['app2', 'v2'], ['app3','v3']],
[['app1', 'v1'], ['app4', 'v4']]]
)
temp_dfs = df.apply(expand_row, axis=1).tolist()
expanded = pd.concat(temp_dfs)
print(expanded)
# name id app_name app_version
# 0 0 1 app1 v1
# 1 0 1 app2 v2
# 2 0 1 app3 v3
# 0 1 2 app1 v1
# 1 1 2 app4 v4
My suggestion (there may be easier ways) is using DataFrame.apply
alongside pd.concat
:
import pandas as pd
def expand_row(row):
apps = row.apps
apps_names = [app[0] for app in apps]
apps_versions = [app[1] for app in apps]
return pd.DataFrame(
'name': row.name,
'id': row.id,
'app_name': apps_names,
'app_version': apps_versions
)
df = pd.DataFrame(
'name': ['john', 'smith'],
'id': [1, 2],
'apps': [[['app1', 'v1'], ['app2', 'v2'], ['app3','v3']],
[['app1', 'v1'], ['app4', 'v4']]]
)
temp_dfs = df.apply(expand_row, axis=1).tolist()
expanded = pd.concat(temp_dfs)
print(expanded)
# name id app_name app_version
# 0 0 1 app1 v1
# 1 0 1 app2 v2
# 2 0 1 app3 v3
# 0 1 2 app1 v1
# 1 1 2 app4 v4
edited 1 hour ago
answered 1 hour ago
araraonlineararaonline
643313
643313
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f56095142%2fpython-pandas-expand-a-column-of-list-of-lists-to-two-new-column%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown