add isin function in DataFrame and Series

This commit is contained in:
wyq 2024-05-23 17:03:09 +08:00
parent 1427817478
commit 1794f0def1
7 changed files with 70 additions and 13 deletions

View File

@ -3513,6 +3513,27 @@ public class DataFrame implements Iterable {
} }
} }
/**
* Whether elements in DataFrame are contained in values
*
* @param values The values
* @return DataFrame of booleans indicating if each element is in values
*/
public DataFrame isIn(List values) {
if (this.array2D) {
Array a = ArrayMath.inValues((Array) this.data, values);
return new DataFrame(a, (Index) this.index.clone(), this.columns.copyAsBoolean());
} else {
List<Array> arrays = (List<Array>) this.data;
List<Array> r = new ArrayList<>();
for (Array arr : arrays) {
Array a = ArrayMath.inValues(arr, values);
r.add(a);
}
return new DataFrame(r, (Index) this.index.clone(), this.columns.copyAsBoolean());
}
}
@Override @Override
public Object clone() { public Object clone() {
Object rdata; Object rdata;

View File

@ -550,6 +550,17 @@ public class Series implements Iterable {
return r; return r;
} }
/**
* Whether elements in Series are contained in values
* @param values The values
* @return Series of booleans indicating if each element is in values
*/
public Series isIn(List values) {
Array rdata = ArrayMath.inValues(data, values);
Series r = new Series(rdata, index, name);
return r;
}
/** /**
* Convert to string - head * Convert to string - head
* *

View File

@ -1,32 +1,32 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<MeteoInfo File="milconfig.xml" Type="configurefile"> <MeteoInfo File="milconfig.xml" Type="configurefile">
<Path OpenPath="D:\Working\MIScript\Jython\mis\io\netcdf"> <Path OpenPath="D:\Working\MIScript\Jython\mis\dataframe">
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\3d\jogl\volume"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\scatter"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\scatter"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\chart"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\chart"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\chart\text"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\chart\text"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite\FY"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\satellite\FY"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\funny"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\funny"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\dataframe"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\bar"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\plot_types\bar"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\netcdf"/> <RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\netcdf"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\radar"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\io\radar\cinrad"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\dataframe\series"/>
<RecentFolder Folder="D:\Working\MIScript\Jython\mis\dataframe"/>
</Path> </Path>
<File> <File>
<OpenedFiles> <OpenedFiles>
<OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\scatter\scatterm_grid.py"/> <OpenedFile File="D:\Working\MIScript\Jython\mis\io\radar\cinrad\test_read_1.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\plot_types\bar\map_bar_1.py"/> <OpenedFile File="D:\Working\MIScript\Jython\mis\io\radar\cinrad\radar_cma_base_cappi.py"/>
<OpenedFile File="D:\Working\MIScript\Jython\mis\io\netcdf\test_read.py"/> <OpenedFile File="D:\Working\MIScript\Jython\mis\dataframe\isin_1.py"/>
</OpenedFiles> </OpenedFiles>
<RecentFiles> <RecentFiles>
<RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\scatter\scatterm_grid.py"/> <RecentFile File="D:\Working\MIScript\Jython\mis\io\radar\cinrad\test_read_1.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\plot_types\bar\map_bar_1.py"/> <RecentFile File="D:\Working\MIScript\Jython\mis\io\radar\cinrad\radar_cma_base_cappi.py"/>
<RecentFile File="D:\Working\MIScript\Jython\mis\io\netcdf\test_read.py"/> <RecentFile File="D:\Working\MIScript\Jython\mis\dataframe\isin_1.py"/>
</RecentFiles> </RecentFiles>
</File> </File>
<Font> <Font>
@ -34,5 +34,5 @@
</Font> </Font>
<LookFeel DockWindowDecorated="true" LafDecorated="true" Name="FlatDarkLaf"/> <LookFeel DockWindowDecorated="true" LafDecorated="true" Name="FlatDarkLaf"/>
<Figure DoubleBuffering="true"/> <Figure DoubleBuffering="true"/>
<Startup MainFormLocation="-7,0" MainFormSize="1407,851"/> <Startup MainFormLocation="-7,0" MainFormSize="1354,829"/>
</MeteoInfo> </MeteoInfo>

View File

@ -1040,6 +1040,18 @@ class DataFrame(object):
""" """
return DataFrame(dataframe=self._dataframe.stdDev()) return DataFrame(dataframe=self._dataframe.stdDev())
def isin(self, values):
"""
Whether elements in DataFrame are contained in values.
Return a boolean DataFrame showing whether each element in the DataFrame matches an element in the passed
sequence of values exactly.
:param values: (*list*) The sequence of values to test.
:return: (*DataFrame*) DataFrame of booleans indicating if each element is in values.
"""
return DataFrame(dataframe=self._dataframe.isIn(values))
@classmethod @classmethod
def read_table(cls, filepath, **kwargs): def read_table(cls, filepath, **kwargs):
""" """

View File

@ -408,6 +408,19 @@ class Series(object):
else: else:
return r return r
def isin(self, values):
"""
Whether elements in Series are contained in values.
Return a boolean Series showing whether each element in the Series matches an element in the passed
sequence of values exactly.
:param values: (*list*) The sequence of values to test.
:return: (*Series*) Series of booleans indicating if each element is in values.
"""
r = self._series.isIn(values)
return Series(series=r)
def groupby(self, by=None): def groupby(self, by=None):
""" """
Group Series. Group Series.