Validate Pandas dataframe column based on hierarchy
I have a dataframe like this
df1 = pd.DataFrame({'Site': ["S1", "S2", "S3", "S4", "S5", "S6","S7","S8","S9"],
'Sitelink': [" ","S1","S2","S6","S4"," ","S8"," ","S7"],
'level': ["R", "T", "P", "T", "P", "R","T","R","P"],
'Weight':["55","55","55","85","85","80","150","190","200"]})
column 'Site' will be always unique
column 'Sitelink' captures the next lower level site to each Site
column 'level' has 3 values- R, T, P where the hierarchy is R < T < P.
column 'Weight' can be any value.
The output should satisfy the condition that weight of a higher level site should be always lesser than or equal to lower level site. Expected result dataframe should be like
I'm trying to loop the dataframe and compare each site with next level. Is there a better approach to do this?
pandas dataframe
add a comment |
I have a dataframe like this
df1 = pd.DataFrame({'Site': ["S1", "S2", "S3", "S4", "S5", "S6","S7","S8","S9"],
'Sitelink': [" ","S1","S2","S6","S4"," ","S8"," ","S7"],
'level': ["R", "T", "P", "T", "P", "R","T","R","P"],
'Weight':["55","55","55","85","85","80","150","190","200"]})
column 'Site' will be always unique
column 'Sitelink' captures the next lower level site to each Site
column 'level' has 3 values- R, T, P where the hierarchy is R < T < P.
column 'Weight' can be any value.
The output should satisfy the condition that weight of a higher level site should be always lesser than or equal to lower level site. Expected result dataframe should be like
I'm trying to loop the dataframe and compare each site with next level. Is there a better approach to do this?
pandas dataframe
2
why row number 5 S5 S4 , value is equal , but return the error
– W-B
Nov 22 '18 at 17:55
@W-B Yes, you're right. Corrected the question
– Osceria
Nov 22 '18 at 22:42
add a comment |
I have a dataframe like this
df1 = pd.DataFrame({'Site': ["S1", "S2", "S3", "S4", "S5", "S6","S7","S8","S9"],
'Sitelink': [" ","S1","S2","S6","S4"," ","S8"," ","S7"],
'level': ["R", "T", "P", "T", "P", "R","T","R","P"],
'Weight':["55","55","55","85","85","80","150","190","200"]})
column 'Site' will be always unique
column 'Sitelink' captures the next lower level site to each Site
column 'level' has 3 values- R, T, P where the hierarchy is R < T < P.
column 'Weight' can be any value.
The output should satisfy the condition that weight of a higher level site should be always lesser than or equal to lower level site. Expected result dataframe should be like
I'm trying to loop the dataframe and compare each site with next level. Is there a better approach to do this?
pandas dataframe
I have a dataframe like this
df1 = pd.DataFrame({'Site': ["S1", "S2", "S3", "S4", "S5", "S6","S7","S8","S9"],
'Sitelink': [" ","S1","S2","S6","S4"," ","S8"," ","S7"],
'level': ["R", "T", "P", "T", "P", "R","T","R","P"],
'Weight':["55","55","55","85","85","80","150","190","200"]})
column 'Site' will be always unique
column 'Sitelink' captures the next lower level site to each Site
column 'level' has 3 values- R, T, P where the hierarchy is R < T < P.
column 'Weight' can be any value.
The output should satisfy the condition that weight of a higher level site should be always lesser than or equal to lower level site. Expected result dataframe should be like
I'm trying to loop the dataframe and compare each site with next level. Is there a better approach to do this?
pandas dataframe
pandas dataframe
edited Nov 22 '18 at 22:41
Osceria
asked Nov 22 '18 at 17:24
OsceriaOsceria
479
479
2
why row number 5 S5 S4 , value is equal , but return the error
– W-B
Nov 22 '18 at 17:55
@W-B Yes, you're right. Corrected the question
– Osceria
Nov 22 '18 at 22:42
add a comment |
2
why row number 5 S5 S4 , value is equal , but return the error
– W-B
Nov 22 '18 at 17:55
@W-B Yes, you're right. Corrected the question
– Osceria
Nov 22 '18 at 22:42
2
2
why row number 5 S5 S4 , value is equal , but return the error
– W-B
Nov 22 '18 at 17:55
why row number 5 S5 S4 , value is equal , but return the error
– W-B
Nov 22 '18 at 17:55
@W-B Yes, you're right. Corrected the question
– Osceria
Nov 22 '18 at 22:42
@W-B Yes, you're right. Corrected the question
– Osceria
Nov 22 '18 at 22:42
add a comment |
1 Answer
1
active
oldest
votes
If i understand correctly, you would like to to check if for each row the weight of the site is lower than or equal to the weight of the site marked as the Sitelink.
The code for a single row would than be:
def is_error(row):
if row['Sitelink'] == " ":
return 'No Error'
site_link = df.loc[df['Site'] == row['Sitelink']]
if int(row['Weight']) <= int(site_link['Weight']):
return 'No Error'
else:
return 'Higher than lower'
Therefore we could apply this line for each row using the apply
function:
df['Error'] = df.apply(is_error, axis=1)
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%2f53435807%2fvalidate-pandas-dataframe-column-based-on-hierarchy%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
If i understand correctly, you would like to to check if for each row the weight of the site is lower than or equal to the weight of the site marked as the Sitelink.
The code for a single row would than be:
def is_error(row):
if row['Sitelink'] == " ":
return 'No Error'
site_link = df.loc[df['Site'] == row['Sitelink']]
if int(row['Weight']) <= int(site_link['Weight']):
return 'No Error'
else:
return 'Higher than lower'
Therefore we could apply this line for each row using the apply
function:
df['Error'] = df.apply(is_error, axis=1)
add a comment |
If i understand correctly, you would like to to check if for each row the weight of the site is lower than or equal to the weight of the site marked as the Sitelink.
The code for a single row would than be:
def is_error(row):
if row['Sitelink'] == " ":
return 'No Error'
site_link = df.loc[df['Site'] == row['Sitelink']]
if int(row['Weight']) <= int(site_link['Weight']):
return 'No Error'
else:
return 'Higher than lower'
Therefore we could apply this line for each row using the apply
function:
df['Error'] = df.apply(is_error, axis=1)
add a comment |
If i understand correctly, you would like to to check if for each row the weight of the site is lower than or equal to the weight of the site marked as the Sitelink.
The code for a single row would than be:
def is_error(row):
if row['Sitelink'] == " ":
return 'No Error'
site_link = df.loc[df['Site'] == row['Sitelink']]
if int(row['Weight']) <= int(site_link['Weight']):
return 'No Error'
else:
return 'Higher than lower'
Therefore we could apply this line for each row using the apply
function:
df['Error'] = df.apply(is_error, axis=1)
If i understand correctly, you would like to to check if for each row the weight of the site is lower than or equal to the weight of the site marked as the Sitelink.
The code for a single row would than be:
def is_error(row):
if row['Sitelink'] == " ":
return 'No Error'
site_link = df.loc[df['Site'] == row['Sitelink']]
if int(row['Weight']) <= int(site_link['Weight']):
return 'No Error'
else:
return 'Higher than lower'
Therefore we could apply this line for each row using the apply
function:
df['Error'] = df.apply(is_error, axis=1)
edited Nov 22 '18 at 23:07
answered Nov 22 '18 at 22:16
Gal AvineriGal Avineri
15210
15210
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%2f53435807%2fvalidate-pandas-dataframe-column-based-on-hierarchy%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
2
why row number 5 S5 S4 , value is equal , but return the error
– W-B
Nov 22 '18 at 17:55
@W-B Yes, you're right. Corrected the question
– Osceria
Nov 22 '18 at 22:42