Imagine we have a DataFrame created like this:
tmp_df = pd.DataFrame(index=xrange(10), columns=['3-1','3-2'])
tmp_df = pd.concat({'2-1': tmp_df, '2-2': tmp_df},axis=1)
tmp_df = pd.concat({'1-1': tmp_df, '1-2': tmp_df}, axis=1)
Which gives:
1-1 1-2
2-1 2-2 2-1 2-2
3-1 3-2 3-1 3-2 3-1 3-2 3-1 3-2
0 NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN NaN
9 NaN NaN NaN NaN NaN NaN NaN NaN
Thus, we have a three-level column indexed DataFrame. Nonetheless, if we want to concatenate to this a different two-level column indexed DataFrame such as:
tmp2_df = pd.Series(np.nan,index=xrange(10))
tmp2_df = pd.concat({'1-3':pd.concat({'2-1': tmp2_df, '2-2': tmp2_df},axis=1)},axis=1)
1-3
2-1 2-2
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 NaN NaN
6 NaN NaN
7 NaN NaN
8 NaN NaN
9 NaN NaN
Using pd.concat(...) destroys the hierarchy:
pd.concat([tmp_df,tmp2_df],axis=1).columns
Index([(u'1-1', u'2-1', u'3-1'), (u'1-1', u'2-1', u'3-2'),
(u'1-1', u'2-2', u'3-1'), (u'1-1', u'2-2', u'3-2'),
(u'1-2', u'2-1', u'3-1'), (u'1-2', u'2-1', u'3-2'),
(u'1-2', u'2-2', u'3-1'), (u'1-2', u'2-2', u'3-2'),
(u'1-3', u'2-1'), (u'1-3', u'2-2')],
dtype='object')
How can we mantain the column index hierarchy in a way that for tmp2_df there is not a 3rd level of column index? Output should be something like:
1-1 1-2 1-3
2-1 2-2 2-1 2-2 2-1 2-2
3-1 3-2 3-1 3-2 3-1 3-2 3-1 3-2
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
I am aware that you can do things like:
tmp_df['test'] = pd.Series(np.nan,index=xrange(10))
1-1 1-2 test
2-1 2-2 2-1 2-2
3-1 3-2 3-1 3-2 3-1 3-2 3-1 3-2
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 NaN NaN NaN NaN NaN NaN NaN NaN NaN
But this solution does not work for appending DataFrames:
ValueError: Wrong number of items passed 2, placement implies 1
Related
I have a dataframe which has 4 columns- Name, Size, Text Extracted, Score.
The score column contains a list with nan in it
something like this
[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan]
Here's how my dataframe looks like
Image Name Image Dimensions Text Extracted score
SGAFIS2457_1_1.jpg (1260, 1585, 3) "[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan]"
SGAFIS2457_1_2.jpg (1235, 1595, 3) "[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan]"
SGAFIS2457_2_1.jpg (1402, 1668, 3) FIS GLOBAL SUSTAINABILITY REPORT TABLE OF CONTENTS INTRODUCTION SUSTAINABLE PLANET I LETTER FROM OUR CHAIRMAN AND CEO REDUCING ENVIRONMENTAL IMPACT II ABOUT FIS III REPORT HIGHLIGHTS SUSTAINABLE GOVERNANCE IV APPROACH TO SUSTAINABLE GROWTH V RESPONSE TO COVID GOVERNANCE OVERSIGHT STRUCTURE AND RESOURCES SUSTAINABLE SOCIETIES RISK MANAGEMENT OPERATIONAL RESILIENCY AND COMPLIANCE EMPOWERING INDIVIDUALS AND MANAGING A SUSTAINABLY BUSINESSES IN THE DIGITAL ECONOMY FOCUSED SUPPLY CHAIN PROTECTING OUR CLIENTS AND THE FINANCIAL SYSTEM APPENDIX ADVANCING THE WORKFORCE OF THE FUTURE CONTENT INDEXES FOSTERING INCLUSION DIVERSITY HELPING COMMUNITIES THRIVE INTRODUCTION 0.384155154
/content/keras-retinanet/PDFs/KPI1/Cropped_images/KPI1_SGAFIS2457_7_1.jpg (1105, 865, 3) MATRIX OF MATERIAL TOPICS Local Communities Training and Education Diversity Equal Opportunity Indirect Economic Impacts Ethics and Integrity Employment Data Privacy and Security Governance Customer Privacy Access to Economic Finance Performance Procurement Indirect Energy Economic Impacts Practices Anti Corruption Business Continuity Anti Competitive Behavior Public Policy INCREASING IMPORTANCE INDUSTRY PERSPECTIVES SUSTAINABLE SUSTAINABLE SUSTAINABLE SOCIETIES PLANET GOVERNANCE EXTERNAL STAKEHOLDERS PERSPECTIVES 0.352203667
SGAALDAR DH_44_1.jpg (758, 1147, 3) GRI "[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan]"
SGAALDAR DH_96_1.jpg (1266, 2316, 3) "[nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan]"
For your reference I'm also attaching a screenshot of the it here
I've tried multiple ways of removing the whole row where the nan in list is present but none of them worked so far. Here's a snippet of code which I tried would solve it but it did not work.
dfKPI = dfKPI[~dfKPI['score'].isin(garb)]
here garb is nothing but the list shared above.
I'm stuck on this problem for a good two days and have researched and tried out multiple things.
From the look of it, it seems that your score column has usually a numerical result, but sometimes has a string containing "[nan nan nan ...]" rather than a list of nan.
One simple way to clean this up (here assuming an original DataFrame called df) is:
df_new = df.assign(score=pd.to_numeric(df['score'], errors='coerce'))
Optionally, you can drop all rows with nan (either resulting from the 'coerce' above, or originally nan):
df_new = (
df
.assign(score=pd.to_numeric(df['score'], errors='coerce'))
.dropna(subset='score')
)
I don't know how i pivot table in picture one to square matrix in table 2.
Value is distinct count anonymous_id
Want to know how many users join in event voucher denied and item_checkout_started, etc. ?
Thanks!
pivot require 3 argumnts:
index (anonymous_id) - in this case
column - Column to use to make new frame’s columns.
values - Column(s) to use for populating new frame’s values.
df.pivot(index=["anonymous_id"], columns=["list_event_n"],values="at")
You can try .pivot_table() with aggfunc='count' to count the number of occurrences of anonymous_id, as folllows:
df.pivot_table(index='list_event_n', columns='list_event_n', values='anonymous_id', aggfunc='count')
Result:
list_event_n item_checkout_started item_viewed outlet_list_viewed outlet_product_clicked outlet_promo_clicked popup_registered popup_viewed product_clicked product_list_viewed product_searched product_viewed promotion_viewed item_checkout_started item_viewed outlet_list_viewed outlet_product_clicked outlet_promo_clicked popup_registered popup_viewed product_clicked product_list_viewed product_searched product_viewed promotion_viewed
list_event_n
item_checkout_started 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
item_viewed NaN 15.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 15.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
outlet_list_viewed NaN NaN 2.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
outlet_product_clicked NaN NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN
outlet_promo_clicked NaN NaN NaN NaN 7.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 7.0 NaN NaN NaN NaN NaN NaN NaN
popup_registered NaN NaN NaN NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN NaN NaN NaN NaN NaN
popup_viewed NaN NaN NaN NaN NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN NaN NaN NaN NaN
product_clicked NaN NaN NaN NaN NaN NaN NaN 17.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 17.0 NaN NaN NaN NaN
product_list_viewed NaN NaN NaN NaN NaN NaN NaN NaN 7.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 7.0 NaN NaN NaN
product_searched NaN NaN NaN NaN NaN NaN NaN NaN NaN 2.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2.0 NaN NaN
product_viewed NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 16.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 16.0 NaN
promotion_viewed NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2.0
I have been trying to get the entire html text of this website.
It only returns the outermost content and all the inner main content of the website is not in it..
import requests
from bs4 import BeautifulSoup
html_text = requests.get('https://oldschool.tools/calculators/quest-planner#').text
soup = BeautifulSoup(html_text, 'html.parser')
print(soup.prettify())
Any support regarding this would be appreciated.
The data is stored inside javascript variable on that page. To parse the data (and create pandas dataframe form it) you can use this example:
import re
import json
import requests
import pandas as pd
url = "https://oldschool.tools/calculators/quest-planner#"
html = requests.get(url).text
data = re.search(r"window\.questData = ({.*})", html).group(1)
data = json.loads(data)
# uncomment this to print all data:
# print(json.dumps(data, indent=4))
df = pd.json_normalize(data.values())
df.index = data.keys()
print(df)
Prints:
name difficulty length qp skillRequirements questRequirements qpRequirement membersOnly skillRequirements.mining skillRequirements.crafting skillRequirements.woodcutting skillRequirements.cooking skillRequirements.fishing skillRequirements.herblore skillRequirements.prayer skillRequirements.smithing skillRequirements.magic skillRequirements.thieving skillRequirements.ranged skillRequirements.attack skillRequirements.firemaking skillRequirements.agility skillRequirements.fletching skillRequirements.strength skillRequirements.defence skillRequirements.slayer skillRequirements.farming skillRequirements.runecrafting skillRequirements.wooductting skillRequirements.construction skillRequirements.hunter skillRequirements.hitpoints
1 Cook's Assistant Novice Short 1 [] [] NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 Demon Slayer Novice Medium 3 [] [] NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 The Restless Ghost Novice Short 1 [] [] NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 Romeo & Juliet Novice Short 5 [] [] NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 Sheep Shearer Novice Short 1 [] [] NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 Shield of Arrav Novice Medium 1 [] [] NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 Ernest the Chicken Novice Short 4 [] [] NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 Vampyre Slayer Novice Short 3 [] [] NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 Imp Catcher Novice Short 1 [] [] NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 Prince Ali Rescue Novice Short 3 [] [] NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
11 Doric's Quest Novice Short 1 NaN [] NaN 0 15.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
12 Black Knights' Fortress Novice Short 3 [] [] 12.0 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
13 Witch's Potion Novice Short 1 [] [] NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
...and so on.
I need to get rows in my dataframe (using .last_valid_index()), but some of the indices which satisfy the condition are NaN (that's fine, as I may have some empty blocks between the cuts).
df.groupby('cuts').apply(lambda x: x.q1.last_valid_index())
Out[289]:
cuts
(2016-04-29 23:59:59.999999999, 2016-05-14] 13.0
(2016-05-14, 2016-05-28] 19.0
(2016-05-28, 2016-06-11] NaN
(2016-06-11, 2016-06-25] NaN
(2016-06-25, 2016-07-09] NaN
(2016-07-09, 2016-07-23] 75.0
(2016-07-23, 2016-08-06] NaN
(2016-08-06, 2016-08-20] NaN
(2016-08-20, 2016-09-03] NaN
(2016-09-03, 2016-09-17] 138.0
(2016-09-17, 2016-10-01] NaN
(2016-10-01, 2016-10-15] 156.0
(2016-10-15, 2016-10-29] NaN
I need to get rid of NaNs, I tried something like:
df.groupby('cuts').apply(lambda x: x.loc[x.q1.last_valid_index()] if (x.q1.last_valid_index() > 0)
but it didn't work.
I'm sure it should be very simple, but I'm struggling to find a neat solution.
EDIT
df[:50]
Out[305]:
response_date q1 crp ferritin hb q2 plasma platelets transferrin q3 wcc value a1 a2 a3 a4
0 2016-04-27 34.0 6.1 15.3 136.0 NaN 1.0 404.0 27.0 NaN 9.33 NaN NaN NaN NaN NaN
1 2016-04-30 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 12.0 0.98 80.0 1.0
2 2016-05-01 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1089.0 NaN NaN NaN NaN
3 2016-05-02 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 2016-05-03 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 2016-05-04 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 2016-05-05 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 2016-05-06 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 2016-05-07 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 2016-05-08 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 2016-05-09 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
11 2016-05-10 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
12 2016-05-11 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
13 2016-05-12 38.0 1.1 11.1 135.0 4.0 1.0 382.0 18.0 5.0 10.60 NaN NaN NaN NaN NaN
14 2016-05-13 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
15 2016-05-14 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 12.0 0.83 80.0 1.0
16 2016-05-15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
17 2016-05-16 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
18 2016-05-17 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
19 2016-05-18 36.0 8.8 15.6 138.0 NaN NaN 369.0 23.0 NaN 9.78 NaN NaN NaN NaN NaN
20 2016-05-19 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
21 2016-05-20 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
22 2016-05-21 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
23 2016-05-22 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
24 2016-05-23 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
25 2016-05-24 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
26 2016-05-25 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
27 2016-05-26 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
28 2016-05-27 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
29 2016-05-28 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 14.0 1.60 80.0 1.0
30 2016-05-29 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
31 2016-05-30 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
32 2016-05-31 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
33 2016-06-01 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
34 2016-06-02 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 802.0 NaN NaN NaN NaN
35 2016-06-03 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
36 2016-06-04 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
37 2016-06-05 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
38 2016-06-06 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
39 2016-06-07 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
40 2016-06-08 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
41 2016-06-09 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
42 2016-06-10 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
43 2016-06-11 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 13.0 1.40 75.0 1.0
44 2016-06-12 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
45 2016-06-13 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
46 2016-06-14 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
47 2016-06-15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
48 2016-06-16 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
49 2016-06-17 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
I need to extract data (blood results) between the dates of a1. I'm usind pd.cut, to get blocks between the dates of a1. If you notice, within some block of a1, there are not blood results, so this is how I got NaN previously. I need to get only rows with bloods between the dates of a1. However, there are might be more than one set of bloods between the dates, so this is why I'm taking the last set of results, which is closer to the end of the a1 block.
Here is a datafrmae.
a = pd.DataFrame({'a':np.arange(10)}, index=np.arange(0,20,2))
# then I can create new dataframe and complete the index.
b = pd.DataFrame(index=np.arange(20))
b['a'] = a
# Now convert the index np.arange(0,20,2) to np.arange(20). Fill noexists value by np.nan.
But how can i do the same way to column? Suppose the column's dtype is int32 and names is np.arange(0,20,2).
It seems you need reindex:
print (a.reindex(b.index))
a
0 0.0
1 NaN
2 1.0
3 NaN
4 2.0
5 NaN
6 3.0
7 NaN
8 4.0
9 NaN
10 5.0
11 NaN
12 6.0
13 NaN
14 7.0
15 NaN
16 8.0
17 NaN
18 9.0
19 NaN
Also can reindex columns:
a.columns = [0]
print (a.reindex(index=b.index, columns=np.arange(0,20,2)))
0 2 4 6 8 10 12 14 16 18
0 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 2.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 3.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 4.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 5.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
11 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
12 6.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
13 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
14 7.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
16 8.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
17 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
18 9.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
19 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN