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
What is the best way for a skeleton to impersonate human without using magic?
Smallest Guaranteed hash collision cycle length
Is the schwa sound consistent?
Plastic-on-plastic lubricant that wont leave a residue?
Why was castling bad for white in this game, and engine strongly prefered trading queens?
Who was this character from the Tomb of Annihilation adventure before they became a monster?
Size of a folder with du
Ex-manager wants to stay in touch, I don't want to
Why does getw return -1 when trying to read a character?
Can the sorting of a list be verified without comparing neighbors?
Front derailleur hard to move due to gear cable angle
Why was the Ancient One so hesitant to teach Dr. Strange the art of sorcery?
Early arrival in Australia, early hotel check in not available
A cryptic tricolour
What are the components of a legend (in the sense of a tale, not a figure legend)?
As programers say: Strive to be lazy
How can I answer high-school writing prompts without sounding weird and fake?
Why doesn't Rocket Lab use a solid stage?
Reaction of borax with NaOH
Why does my circuit work on a breadboard, but not on a perfboard? I am new to soldering
Two researchers want to work on the same extension to my paper. Who to help?
What to do if SUS scores contradict qualitative feedback?
How to make a language evolve quickly?
What does a comma mean inside an 'if' statement?
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
2 hours 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
2 hours ago
I have, that's why I commented.
– RafaelC
1 hour ago
Can also refer here for details
– RafaelC
1 hour ago
1
Wow, thanks. That is like 30% faster.
– James
1 hour 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
2 hours 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
2 hours 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
2 hours ago
I have, that's why I commented.
– RafaelC
1 hour ago
Can also refer here for details
– RafaelC
1 hour ago
1
Wow, thanks. That is like 30% faster.
– James
1 hour 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
2 hours 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
2 hours ago
I have, that's why I commented.
– RafaelC
1 hour ago
Can also refer here for details
– RafaelC
1 hour ago
1
Wow, thanks. That is like 30% faster.
– James
1 hour 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
2 hours 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
2 hours ago
I have, that's why I commented.
– RafaelC
1 hour ago
Can also refer here for details
– RafaelC
1 hour ago
1
Wow, thanks. That is like 30% faster.
– James
1 hour ago
|
show 2 more comments
Instead of.apply(pd.Series)
(which is awfully slow), usepd.DataFrame(df.apps.tolist())
– RafaelC
2 hours 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
2 hours ago
I have, that's why I commented.
– RafaelC
1 hour ago
Can also refer here for details
– RafaelC
1 hour ago
1
Wow, thanks. That is like 30% faster.
– James
1 hour ago
Instead of
.apply(pd.Series)
(which is awfully slow), use pd.DataFrame(df.apps.tolist())
– RafaelC
2 hours ago
Instead of
.apply(pd.Series)
(which is awfully slow), use pd.DataFrame(df.apps.tolist())
– RafaelC
2 hours 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
2 hours 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
2 hours ago
I have, that's why I commented.
– RafaelC
1 hour ago
I have, that's why I commented.
– RafaelC
1 hour ago
Can also refer here for details
– RafaelC
1 hour ago
Can also refer here for details
– RafaelC
1 hour ago
1
1
Wow, thanks. That is like 30% faster.
– James
1 hour ago
Wow, thanks. That is like 30% faster.
– James
1 hour 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
2 hours 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
2 hours 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 2 hours 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
2 hours 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
2 hours 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
2 hours 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
2 hours 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 2 hours ago
answered 2 hours 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