I have the following dataframe:
recordhigh recordlow
no_year
01-01 NaN NaN
01-02 NaN NaN
01-03 NaN NaN
01-04 NaN NaN
01-05 NaN -15.5
01-06 NaN NaN
01-07 NaN NaN
01-08 NaN NaN
01-09 NaN NaN
01-10 NaN NaN
01-11 NaN -20.0
01-12 NaN NaN
01-13 NaN NaN
01-14 NaN NaN
01-15 NaN NaN
01-16 NaN NaN
01-17 NaN NaN
01-18 NaN NaN
01-19 NaN NaN
01-20 NaN NaN
01-21 NaN NaN
01-22 NaN NaN
01-23 NaN NaN
01-24 NaN NaN
01-25 NaN NaN
01-26 NaN NaN
01-27 NaN NaN
01-28 NaN NaN
01-29 NaN NaN
01-30 NaN NaN
... ... ...
12-02 NaN NaN
12-03 NaN NaN
12-04 NaN NaN
12-05 NaN NaN
12-06 NaN NaN
12-07 10.0 NaN
12-08 10.0 NaN
12-09 12.2 NaN
12-10 15.0 NaN
12-11 15.6 NaN
12-12 20.0 NaN
12-13 19.4 NaN
12-14 18.3 NaN
12-15 16.1 NaN
12-16 15.0 NaN
12-17 NaN NaN
12-18 NaN NaN
12-19 NaN NaN
12-20 NaN NaN
12-21 NaN NaN
12-22 NaN NaN
12-23 18.3 NaN
12-24 17.2 NaN
12-25 11.1 NaN
12-26 11.7 NaN
12-27 NaN NaN
12-28 NaN NaN
12-29 NaN NaN
12-30 NaN NaN
12-31 NaN NaN
I want to keep the recordhigh and recordlow when they are not NaN. Ie I want a column with all the recordhigh numbers, all the recordlow number, and NaN in case both are NaN.
I have the following code for a function to apply :
def keep2015record(row):
if row['recordhigh']!=np.nan:
row['record']=row['recordhigh']
else:
row['record']=row['recordlow']
return row
I apply it to my dataframe:
df2015record=df2015record.apply(keep2015record,axis='columns')
And i only get a dataframe that keeps recordhigh :
recordhigh recordlow record
no_year
01-01 NaN NaN NaN
01-02 NaN NaN NaN
01-03 NaN NaN NaN
01-04 NaN NaN NaN
01-05 NaN -15.5 NaN
01-06 NaN NaN NaN
01-07 NaN NaN NaN
01-08 NaN NaN NaN
01-09 NaN NaN NaN
01-10 NaN NaN NaN
01-11 NaN -20.0 NaN
01-12 NaN NaN NaN
01-13 NaN NaN NaN
01-14 NaN NaN NaN
01-15 NaN NaN NaN
01-16 NaN NaN NaN
01-17 NaN NaN NaN
01-18 NaN NaN NaN
01-19 NaN NaN NaN
01-20 NaN NaN NaN
01-21 NaN NaN NaN
01-22 NaN NaN NaN
01-23 NaN NaN NaN
01-24 NaN NaN NaN
01-25 NaN NaN NaN
01-26 NaN NaN NaN
01-27 NaN NaN NaN
01-28 NaN NaN NaN
01-29 NaN NaN NaN
01-30 NaN NaN NaN
... ... ... ...
12-02 NaN NaN NaN
12-03 NaN NaN NaN
12-04 NaN NaN NaN
12-05 NaN NaN NaN
12-06 NaN NaN NaN
12-07 10.0 NaN 10.0
12-08 10.0 NaN 10.0
12-09 12.2 NaN 12.2
12-10 15.0 NaN 15.0
12-11 15.6 NaN 15.6
12-12 20.0 NaN 20.0
12-13 19.4 NaN 19.4
12-14 18.3 NaN 18.3
12-15 16.1 NaN 16.1
12-16 15.0 NaN 15.0
12-17 NaN NaN NaN
12-18 NaN NaN NaN
12-19 NaN NaN NaN
12-20 NaN NaN NaN
12-21 NaN NaN NaN
12-22 NaN NaN NaN
12-23 18.3 NaN 18.3
12-24 17.2 NaN 17.2
12-25 11.1 NaN 11.1
12-26 11.7 NaN 11.7
12-27 NaN NaN NaN
12-28 NaN NaN NaN
12-29 NaN NaN NaN
12-30 NaN NaN NaN
12-31 NaN NaN NaN
What am i doing wrong please?
I have also tried if, elif, else but i get the same result.
Thank you
Hi I guess you're trying to keep the records where either "recordhigh" or "recordlow" are not nan.
In that case you can simply use:
df_either_nonans=df[df['recordhigh'].notna() | df['recordlow'].notna() ]
print(df)
result:
noyear recordhigh recordlow
4 01-mag NaN -15.5
10 01-nov NaN -20
30 ... ... ...
36 12-lug 10 NaN
37 12-ago 10 NaN
38 12-set 12.2 NaN
39 12-ott 15 NaN
40 12-nov 15.6 NaN
41 12-dic 20 NaN
42 dic-13 19.4 NaN
43 dic-14 18.3 NaN
44 dic-15 16.1 NaN
45 dic-16 15 NaN
52 dic-23 18.3 NaN
53 dic-24 17.2 NaN
54 dic-25 11.1 NaN
55 dic-26 11.7 NaN
if you'd like to keep only records where both are not nan, then simply substitute "|" with "&":
df_both_nonans=df[df['recordhigh'].notna() & df['recordlow'].notna() ]
Related
Hi I am trying to plot the two values in matrix form, I tried many things but nothing worked, can someone please help? I want similarity values to be the values, my data:
https://github.com/mayuripandey/Data-Analysis/blob/main/matrix.csv
Desired output:
Use pivot_table:
df['Topic_model'] = df['Topic_model'].str.split('-', n=1).str[1].astype(int)
out = (df.pivot_table('Similarity', 'Topic_model', 'Topic_model')
.rename_axis(index='Topic_2', columns='Topic_1'))
Output:
>>> out
Topic_1 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
Topic_2
-1 0.25 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
0 NaN 1.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 NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN 0.111111 NaN NaN NaN NaN NaN NaN NaN NaN 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 NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN NaN NaN 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 NaN NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN NaN 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 NaN NaN NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN 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 NaN NaN NaN NaN NaN NaN 0.111111 NaN NaN NaN NaN 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 NaN NaN NaN NaN NaN NaN NaN 0.111111 NaN NaN NaN 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 NaN NaN NaN NaN NaN NaN NaN NaN 0.166667 NaN NaN 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 NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.111111 NaN 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 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.111111 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 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
11 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
12 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.25 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
13 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
14 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
16 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
17 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
18 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
19 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
20 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
21 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
22 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
23 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
24 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
25 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0 NaN NaN NaN NaN NaN NaN NaN NaN
26 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN NaN NaN
27 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN NaN
28 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN
29 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0 NaN NaN NaN NaN
30 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0 NaN NaN NaN
31 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0 NaN NaN
32 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0 NaN
33 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0
df = pd.read_csv('https://raw.githubusercontent.com/mayuripandey/Data-Analysis/main/matrix.csv', usecols=['Topic_model', 'Similarity'])
df.Topic_model = df.Topic_model.apply(lambda x: x[0:6] + '0' + x[6:] if len(x) == 7 else x)
df = df.pivot(columns='Topic_model')
Output:
Similarity ...
Topic_model Topic--1 Topic-00 Topic-01 Topic-02 Topic-03 Topic-04 Topic-05 Topic-06 Topic-07 ... Topic-25 Topic-26 Topic-27 Topic-28 Topic-29 Topic-30 Topic-31 Topic-32 Topic-33
0 0.25 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN 0.111111 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN 0.111111 NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN 0.111111 NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN 0.111111 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
7 NaN NaN NaN NaN NaN NaN NaN 0.111111 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN NaN 0.166667 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
10 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
11 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
12 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
13 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
14 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
15 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
16 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
17 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
18 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
19 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
20 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
21 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
22 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
23 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
24 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
25 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... 0.0 NaN NaN NaN NaN NaN NaN NaN NaN
26 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN
27 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN 0.111111 NaN NaN NaN NaN NaN NaN NaN
28 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN 0.111111 NaN NaN NaN NaN NaN NaN
29 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN 0.111111 NaN NaN NaN NaN NaN
30 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN 0.0 NaN NaN NaN NaN
31 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN 0.0 NaN NaN NaN
32 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN 0.0 NaN NaN
33 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN 0.0 NaN
34 NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN 0.0
I've been looking for the way to remove NaN in each row of dfA(DataFrame) and after then, move every row under push1_start_date and reconnect with the end of push1_start_date. Is it possible to do that ?? I tried stack() and unstack() method but it doesn't work .Thank you.
push1_start_date push2_start_date push3_start_date push4_start_date push5_start_date push6_start_date push7_start_date push8_start_date
2021-04-29 3 NaN NaN NaN NaN NaN NaN NaN
2021-04-30 20 NaN NaN NaN NaN NaN NaN NaN
2021-05-01 24 NaN NaN NaN NaN NaN NaN NaN
2021-05-02 21 NaN NaN NaN NaN NaN NaN NaN
2021-05-03 14 NaN NaN NaN NaN NaN NaN NaN
2021-05-04 5 NaN NaN NaN NaN NaN NaN NaN
2021-05-05 14 NaN NaN NaN NaN NaN NaN NaN
2021-05-06 16 NaN NaN NaN NaN NaN NaN NaN
2021-05-07 17 NaN NaN NaN NaN NaN NaN NaN
2021-05-08 14 NaN NaN NaN NaN NaN NaN NaN
2021-05-11 78 NaN NaN NaN NaN NaN NaN NaN
2021-05-12 20 78.0 NaN NaN NaN NaN NaN NaN
2021-05-13 13 21.0 NaN NaN NaN NaN NaN NaN
2021-05-14 8 12.0 NaN NaN NaN NaN NaN NaN
2021-05-15 18 8.0 NaN NaN NaN NaN NaN NaN
2021-05-16 16 19.0 NaN NaN NaN NaN NaN NaN
2021-05-17 16 16.0 NaN NaN NaN NaN NaN NaN
2021-05-18 18 15.0 NaN NaN NaN NaN NaN NaN
2021-05-19 14 19.0 NaN NaN 1.0 2.0 NaN NaN
2021-05-20 13 14.0 1.0 NaN 1.0 1.0 NaN NaN
2021-05-21 11 13.0 NaN NaN 1.0 NaN 1.0 NaN
2021-05-22 26 10.0 NaN 2.0 NaN 1.0 NaN NaN
2021-05-23 12 27.0 NaN 1.0 NaN NaN NaN NaN
2021-05-24 15 12.0 1.0 3.0 NaN 1.0 NaN NaN
2021-05-25 9 16.0 NaN 1.0 NaN 1.0 NaN NaN
2021-05-26 14 9.0 NaN 1.0 NaN NaN NaN NaN
2021-05-27 14 12.0 NaN NaN NaN NaN NaN NaN
2021-05-28 21 16.0 NaN NaN NaN NaN NaN NaN
2021-05-29 23 20.0 1.0 2.0 1.0 1.0 NaN NaN
2021-05-30 18 23.0 1.0 NaN 1.0 1.0 NaN NaN
2021-05-31 19 17.0 NaN 3.0 1.0 3.0 NaN NaN
2021-06-01 15 21.0 NaN 3.0 1.0 1.0 NaN NaN
2021-06-02 22 13.0 1.0 2.0 NaN 1.0 NaN NaN
2021-06-03 19 23.0 1.0 NaN NaN 1.0 NaN NaN
2021-06-04 12 20.0 2.0 NaN 2.0 NaN NaN NaN
2021-06-05 2 1.0 NaN NaN NaN 1.0 NaN NaN
ideal output
push1_start_date
2021-04-29 3 ←The begging of push1_start_date
2021-06-05 2 ←The last of push1_start_date
2021-05-12 78 ←The begging of push2_start_date
2021-06-05 1.0 ←The last of push2_start_date
2021-05-20 1.0 ←The begging of push2_start_date
2021-06-04 2.0 ←The last of push2_start_date
it comtines untill push8_start_date
You can try with reset_index(), melt(),dropna() and drop():
out=(df.reset_index()
.melt('index',value_name='push_start_date')
.dropna(subset=['push_start_date'])
.drop('variable',1))
OR
via concat() and to_frame():
out=(pd.concat([df[x].dropna() for x in df.columns[df.dtypes!='object']])
.to_frame('push_start_date'))
You could use df.melt() to stack all the columns on the right into 1 column, then keep only the value column without null values:
df.melt().drop('variable', axis=1).dropna()
Output
value
2021-04-29 3
... ...
2021-06-05 2
2021-05-12 78
... ...
2021-06-05 1.0
2021-05-20 1.0
... ...
2021-06-04 2.0
... ...
I have a squared dataframe containing over 505 rows and columns (a 505x505 matrix)
which I need to dot multiply to an ndarray from numpy (505 items).
the problem is that the result is an ndarray with 505 items, full of nan.
I tried replicating it on a separate notebook, but I wasn't able to.
in
print('df ', df)
print('info ', df.info())
result = np.dot(df, np.random.rand(505))
print('result.shape: ', result.shape)
print('result ', result)
out
df A AAL AAP AAPL ABBV ABC ABMD \
A 0.093188 0.072021 0.048887 0.067503 0.047795 0.052311 0.051706
AAL 0.072021 0.547093 0.099290 0.069475 0.045120 0.066275 0.065950
AAP 0.048887 0.099290 0.143932 0.055590 0.043934 0.059230 0.041979
AAPL 0.067503 0.069475 0.055590 0.140050 0.051688 0.054113 0.060444
ABBV 0.047795 0.045120 0.043934 0.051688 0.096598 0.047673 0.032663
... ... ... ... ... ... ... ...
YUM 0.042185 0.095983 0.058538 0.052228 0.036547 0.046676 0.031293
ZBH 0.054474 0.127670 0.057043 0.054673 0.046718 0.054718 0.053090
ZBRA 0.079731 0.100945 0.064364 0.091272 0.054140 0.062255 0.066586
ZION 0.061233 0.176829 0.075915 0.048804 0.044935 0.066857 0.044151
ZTS 0.060966 0.052413 0.054156 0.069211 0.047445 0.054443 0.041018
XRAY XYL YUM ZBH ZBRA ZION ZTS
A 0.053152 0.064197 0.042185 0.054474 0.079731 0.061233 0.060966
AAL 0.110541 0.125551 0.095983 0.127670 0.100945 0.176829 0.052413
AAP 0.064716 0.071780 0.058538 0.057043 0.064364 0.075915 0.054156
AAPL 0.047973 0.067265 0.052228 0.054673 0.091272 0.048804 0.069211
ABBV 0.049469 0.043552 0.036547 0.046718 0.054140 0.044935 0.047445
... ... ... ... ... ... ... ...
YUM 0.060310 0.059523 0.098728 0.069827 0.051222 0.057302 0.057192
ZBH 0.084555 0.068429 0.069827 0.136291 0.070115 0.089688 0.058264
ZBRA 0.068271 0.085070 0.051222 0.070115 0.185910 0.087744 0.069007
ZION 0.099294 0.098861 0.057302 0.089688 0.087744 0.204927 0.040132
ZTS 0.052646 0.057712 0.057192 0.058264 0.069007 0.040132 0.095019
[505 rows x 505 columns]
<class 'pandas.core.frame.DataFrame'>
Index: 505 entries, A to ZTS
Columns: 505 entries, A to ZTS
dtypes: float64(505)
memory usage: 2.0+ MB
info None
result.shape: (505,)
result [nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan]
In this situation you should use DataFrame.dot
import pandas as pd;
import numpy as np
df = pd.DataFrame(np.random.randn(5,5), columns=['one', 'two', 'three', 'four', 'five'])
other = pd.DataFrame(np.random.randn(5,5), columns=['one', 'two', 'three', 'four', 'five']).transpose()
Notice that the indices of the second DataFrame must match the rows of the first, then you can multiply them
df.dot(other)
# or
other.dot(df)
Remember that the matrix multiplication is not commutative.
If you do df.dot(other) it will return a dataframe with the indices of df and the columns of other, if you call it with a numpy array it will return a dataframe with columns counting [0,1,2,...]
I have a dictionary that looks like this:
my_dict = {'product1' : [1, 511, 31, 222, 9020], 'product2' : [92, 511, 314, 4324], 'product3' : [40, 17, 4324]}
I want to create a dataframe that has the products as the index and the column names should be a range from 1 - 10 000, and if the value list associated to the product has the number it should be marked as a 1 or True in the column for the respective number.
1 2 3 ... 4324 .... 9020
product1 1 1
product2 1
product3 1
This entire dictionary has 80 products, each associated with a list of 0 to maybe a maximum of 50 numbers. The numbers could range between 1 and 10 000.
I would really appreciate any hints, I haven't managed to found a good way. I know I can create a dataframe from dictionary with pandas.DataFrame.from_dict() but it doesn't really do what I want.
I did a "ugly" solution, but I'm guessing this is not best practice or pythonic:
column_names = list(range(0,10000))
df = pd.DataFrame(columns = column_names)
for k, v in my_dict.items():
x = pd.Series(np.ones(len(v), dtype=int), index =v, name=k)
df = df.append(x)
print(df.head())
which outputs
0 1 2 3 4 5 6 7 8 9 ... \
product1 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN ...
product2 NaN NaN NaN 1.0 NaN NaN NaN NaN NaN NaN ...
product3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
9990 9991 9992 9993 9994 9995 9996 9997 9998 9999
product1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
product2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
product3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[3 rows x 10000 columns]
One way could be to use start by constructing a dataframe from the dictionary via the alternative constructor pd.DataFrame.from_dict, which handles arrays of different length setting orient='index'.
df = pd.DataFrame.from_dict(my_dict, orient='index')
Then usepd.get_dummies over all columns:
df = pd.get_dummies(df, columns=df.columns, prefix='', prefix_sep='')
df.columns = pd.to_numeric(df.columns).astype(int)
df.T.groupby(level=0).max().T.reindex(range(df.columns.max()), axis=1)
0 1 2 3 4 5 6 7 8 9 ... \
product1 NaN 1 NaN NaN NaN NaN NaN NaN NaN NaN ...
product2 NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN ...
product3 NaN 0 NaN NaN NaN NaN NaN NaN NaN NaN ...
9010 9011 9012 9013 9014 9015 9016 9017 9018 9019
product1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
product2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
product3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Use the from_dict method with orient='index':
my_dict = {
'product1' : [1, 511, 31, 222, 9020],
'product2' : [92, 511, 314, 4324],
'product3' : [40, 17, 4324]
}
df = pd.DataFrame.from_dict(my_dict, orient='index')
print(df)
Output:
0 1 2 3 4
product1 1 511 31 222.0 9020.0
product2 92 511 314 4324.0 NaN
product3 40 17 4324 NaN NaN
Try this
import pandas as pd
import numpy as np
my_dict = {'product1' : [1, 511, 31, 222, 9020], 'product2' : [92, 511, 314, 4324], 'product3' : [40, 17, 4324]}
res = []
for x in my_dict:
arr = [np.nan] * 10000
for y in my_dict[x]:
arr[y - 1] = 1
res.append(arr)
df = pd.DataFrame(res, index=my_dict.keys())
print(df)
Output:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 ... 9750 9751 9752 9753 9754 9755 9756 9757 9758 9759 9760 9761 9762 9763 9764 9765 9766 9767 9768 9769 9770 9771 9772 9773 9774 9775 9776 9777 9778 9779 9780 9781 9782 9783 9784 9785 9786 9787 9788 9789 9790 9791 9792 9793 9794 9795 9796 9797 9798 9799 9800 9801 9802 9803 9804 9805 9806 9807 9808 9809 9810 9811 9812 9813 9814 9815 9816 9817 9818 9819 9820 9821 9822 9823 9824 9825 9826 9827 9828 9829 \
product1 1.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 NaN NaN NaN NaN NaN 1.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 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.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 NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
product2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.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 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
product3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1.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 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9830 9831 9832 9833 9834 9835 9836 9837 9838 9839 9840 9841 9842 9843 9844 9845 9846 9847 9848 9849 9850 9851 9852 9853 9854 9855 9856 9857 9858 9859 9860 9861 9862 9863 9864 9865 9866 9867 9868 9869 9870 9871 9872 9873 9874 9875 9876 9877 9878 9879 9880 9881 9882 9883 9884 9885 9886 9887 9888 9889 9890 9891 9892 9893 9894 9895 9896 9897 9898 9899 9900 9901 9902 9903 9904 9905 9906 9907 9908 9909 9910 9911 9912 9913 9914 9915 9916 9917 9918 9919 9920 9921 9922 9923 9924 9925 9926 9927 9928 9929 9930 9931 9932 9933 9934 9935 9936 9937 9938 9939 9940 9941 9942 9943 9944 9945 9946 9947 9948 9949 9950 9951 9952 9953 9954 9955 9956 9957 9958 9959 9960 9961 9962 9963 9964 9965 9966 9967 9968 9969 9970 9971 9972 9973 9974 9975 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996 9997 9998 9999
product1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
product2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
product3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 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 is a sample of my dataframe:
benzene toluene styrene xylenes + ethylbenzene 1,3,5-trimethylbenzene propylbenzene chlorobenzene 4-ethyltoluene isopropyl benzene 1,3-butadiene
0 1.1040 NaN NaN NaN NaN NaN NaN NaN NaN 0.1914
1 1.1312 NaN NaN NaN NaN NaN NaN NaN NaN 0.2353
2 1.6092 NaN NaN NaN NaN NaN NaN NaN NaN 0.7289
3 1.2578 NaN NaN NaN NaN NaN NaN NaN NaN 0.3269
4 1.8245 NaN NaN NaN NaN NaN NaN NaN NaN 0.2859
5 1.1438 NaN NaN NaN NaN NaN NaN NaN NaN 0.1229
6 1.1492 NaN NaN NaN NaN NaN NaN NaN NaN 0.4135
7 0.8638 NaN NaN NaN NaN NaN NaN NaN NaN 0.6211
8 1.3209 NaN NaN NaN NaN NaN NaN NaN NaN 0.6243
9 1.8316 NaN NaN NaN NaN NaN NaN NaN NaN 0.6711
10 1.0491 NaN NaN NaN NaN NaN NaN NaN NaN 0.3379
11 1.5014 NaN NaN NaN NaN NaN NaN NaN NaN 0.7981
12 0.8355 NaN NaN NaN NaN NaN NaN NaN NaN 0.2950
13 1.5157 NaN NaN NaN NaN NaN NaN NaN NaN 0.7630
14 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
15 0.3561 NaN NaN NaN NaN NaN NaN NaN NaN 0.1983
16 16.9953 NaN NaN NaN NaN NaN NaN NaN NaN 11.6154
17 NaN 2.5533 1.7676 4.8479 2.1782 2.0693 NaN NaN NaN NaN
18 NaN 4.8740 4.5862 5.6155 5.3850 5.1158 NaN NaN NaN NaN
19 NaN 5.5761 7.1540 5.2305 7.0061 6.6558 NaN NaN NaN NaN
20 NaN 5.6369 8.0997 5.0377 7.4323 7.0607 NaN NaN NaN NaN
21 NaN 5.6762 8.5204 5.0503 7.9827 7.5835 NaN NaN NaN NaN
22 NaN 5.7317 8.9214 4.7230 8.4647 8.0415 NaN NaN NaN NaN
23 NaN 5.6349 8.3186 4.2832 8.4023 7.9822 NaN NaN NaN NaN
24 NaN 5.5504 9.1297 4.2451 8.2951 7.8803 NaN NaN NaN NaN
25 NaN 5.9629 9.0821 4.3384 9.0512 8.5986 NaN NaN NaN NaN
26 NaN 5.7665 10.1691 4.2266 8.9481 8.5007 NaN NaN NaN NaN
27 NaN 5.6709 9.1637 4.0334 9.0945 8.6397 NaN NaN NaN NaN
28 NaN 5.8178 8.8859 4.0104 9.0523 8.5997 NaN NaN NaN NaN
29 NaN 5.5470 9.0448 3.9718 8.8667 8.4233 NaN NaN NaN NaN
[...]
Actual size is 66x10
I have sequence of about 17 non NAN values for each column. I would like to drop the Nan cells to have a a full 17x10 table.
I used pd.DataFrame.dropna but it doesn't remove patches of cell. Is there a way to do so without looping over columns?
I think you can use apply with dropna:
df = df.apply(lambda x: pd.Series(x.dropna().values))
print (df)
Another numpy solution with sorting numpy array created by values and then remove rows with all NaN by dropna:
df = pd.DataFrame(np.sort(df.values, axis=0), index=df.index, columns=df.columns)
.dropna(how='all')
print (df)