Theres actually a very simple way to do this with df.cummax()
.
cols = ['your', 'columns']
mon_inc = (df[cols].cummax().diff().fillna(.1) > 0).all(axis = 1)
df[mon_inc]
You could keep taking the difference in rows using the diff
method until all values are greater than 0.
while True:
mon_inc = df['x'].diff().fillna(0) >= 0
if mon_inc.all():
break
df = df[mon_inc]
And a function to do any number of columns
def make_monotonic(df, cols = None):
if cols is None:
cols = df.columns
df1 = df.copy()[cols]
while True:
mon_inc = (df1.diff().fillna(0) >= 0).all(axis = 1)
if mon_inc.all():
break
df1 = df1[mon_inc]
return df1
Theres actually a very simple way to do this with df.cummax().,How do you make plotting two pandas Series in the same ipython notebook cell use different colors automatically?,Is there any simpler method in pandas to replace null values other than loop in this case?,Is there a better way than this to make bar plot of UNIQUE counts between categorical pandas columns
Theres actually a very simple way to do this with df.cummax()
.
cols = ['your', 'columns']
mon_inc = (df[cols].cummax().diff().fillna(.1) > 0).all(axis = 1)
df[mon_inc]
You could keep taking the difference in rows using the diff
method until all values are greater than 0.
while True:
mon_inc = df['x'].diff().fillna(0) >= 0
if mon_inc.all():
break
df = df[mon_inc]
And a function to do any number of columns
def make_monotonic(df, cols = None):
if cols is None:
cols = df.columns
df1 = df.copy()[cols]
while True:
mon_inc = (df1.diff().fillna(0) >= 0).all(axis = 1)
if mon_inc.all():
break
df1 = df1[mon_inc]
return df1
Let’s create a simple DataFrame to perform this operation as shown below.,You can also perform type casting to convert a DataFrame column to a list.It is similar to using the tolist() method wherein you select the column which is to be converted and then typecast it to a list.,The columns of a pandas DataFrame are also pandas Series objects. You can convert the columns into a list using the tolist() method.,After loading/creating the DataFrame, use the tolist() method on the selected column.
Let’s create a simple pandas series as an example.
import pandas as pd # Create the data of the series as a dictionary data_ser = { 'Name': 'Sony', 'Country of Origin': 'Japan', 'Revenue': 25000000000 } # Create the series ser = pd.Series(data_ser) ser
Name Sony Country of Origin Japan Revenue 25000000000 dtype: object
To convert a pandas Series to a list, simply call the tolist()
method on the series which you wish to convert.
# Convert the series to a list list_ser = ser.tolist() print('Created list:', list_ser)
Let’s create a simple DataFrame to perform this operation as shown below.
# Create the data of the DataFrame as a dictionary data_df = { 'Name': ['Sony', 'Tencent', 'Nintendo', 'Microsoft', 'Activision Blizzard'], 'Country of Origin': ['Japan', 'China', 'Japan', 'USA', 'USA'], 'Revenue': [25000000000, 13900000000, 12100000000, 11600000000, 8100000000] } # Create the DataFrame df = pd.DataFrame(data_df) df
After loading/creating the DataFrame, use the tolist()
method on the selected column.
# Convert the name column of the DataFrame to a list name_list = df['Name'].tolist() print('Created list:', name_list) print('Data type of the created list:', type(name_list))
Monotonic could be both increasing or anycodings_pandas decreasing, the functions below will anycodings_pandas return exclude all values that brean anycodings_pandas monotonicity.,Here is a way to produce a monotonically anycodings_pandas increasing series:,Below is a simple way of finding the anycodings_pandas longest monotonic ascending array given anycodings_pandas your constraints using plain python:,Perhaps you want to find the longest anycodings_pandas monotonic array? because that's a anycodings_pandas completely different search problem.
For example
s = pd.Series([0, 1, 2, 3, 10, 4, 5, 6])
or
s = pd.Series([0, 1, 2, 3, -1, 4, 5, 6])
we would extract
s = pd.Series([0, 1, 2, 3, 4, 5, 6])
However, there seems to be a confusion anycodings_pandas in your question, given the series s = anycodings_pandas pd.Series([0,1,2,3,10,4,5,6]), 10 anycodings_pandas doesn't break monotonicity conditions, anycodings_pandas 4, 5, 6 do. So the correct answer there anycodings_pandas is 0, 1, 2, 3, 10
import pandas as pd
s = pd.Series([0, 1, 2, 3, 10, 4, 5, 6])
def to_monotonic_inc(s):
return s[s >= s.cummax()]
def to_monotonic_dec(s):
return s[s <= s.cummin()]
print(to_monotonic_inc(s))
print(to_monotonic_dec(s))
Below is a simple way of finding the anycodings_pandas longest monotonic ascending array given anycodings_pandas your constraints using plain python:
def get_longeset_monotonic_asc(s): enumerated = sorted([(v, i) for i, v in enumerate(s) if v >= s[0]])[1: ] output = [s[0]] last_index = 0 for v, i in enumerated: if i > last_index: last_index = i output.append(v) return output s1 = [0, 1, 2, 3, 10, 4, 5, 6] s2 = [0, 1, 2, 3, -1, 4, 5, 6] print(get_longeset_monotonic_asc(s1)) print(get_longeset_monotonic_asc(s2)) '' ' Output: [0, 1, 2, 3, 4, 5, 6] [0, 1, 2, 3, 4, 5, 6] '' '
Here is a way to produce a monotonically anycodings_pandas increasing series:
import pandas as pd # create data s = pd.Series([1, 2, 3, 4, 5, 4, 3, 2, 3, 4, 5, 6, 7, 8]) # find max so far(i.e., running_max) df = pd.concat([s.rename('orig'), s.cummax().rename('running_max'), ], axis = 1) # are we at or above max so far ? df['keep?'] = (df['orig'] >= df['running_max']) # filter out one or many points below max so far df = df.loc[df['keep?'], 'orig'] # verify that remaining points are monotonically increasing assert pd.Index(df).is_monotonic_increasing # print(df.drop_duplicates()) # eliminates ties print(df) # keeps ties 0 1 1 2 2 3 3 4 4 5 10 5 # < --same as previous value--a tie 11 6 12 7 13 8 Name: orig, dtype: int64