Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在具有日期的多个列上具有多个条件的数据帧子集_Python_Pandas_Date_Dataframe - Fatal编程技术网

Python 在具有日期的多个列上具有多个条件的数据帧子集

Python 在具有日期的多个列上具有多个条件的数据帧子集,python,pandas,date,dataframe,Python,Pandas,Date,Dataframe,我有一个数据框,如下所示: slot_id class day base_date 0 1 A Monday 2019-01-21 1 2 B Tuesday 2019-01-22 2 3 C Wednesday 2019-01-23 3 4 C Wednesday 2019-01-23 4 5 C Thursday 2019-01-

我有一个数据框,如下所示:

  slot_id class        day   base_date
0        1     A     Monday  2019-01-21
1        2     B    Tuesday  2019-01-22
2        3     C  Wednesday  2019-01-23
3        4     C  Wednesday  2019-01-23
4        5     C   Thursday  2019-01-24
提供以下信息:

example.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8 entries, 0 to 7
Data columns (total 4 columns):
slot_id      8 non-null int64
class        8 non-null object
day          8 non-null object
base_date    8 non-null object
dtypes: int64(1), object(3)
memory usage: 200.0+ bytes
上面的代码有什么问题?我怎样才能得到满足上述条件的整排? 完整的
示例
数据帧:

{'slot_id': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8}, 'class': {0: 'A', 1: 'B', 2: 'C', 3: 'C', 4: 'C', 5: 'C', 6: 'D', 7: 'E'}, 'day': {0: 'Monday', 1: 'Tuesday', 2: 'Wednesday', 3: 'Wednesday', 4: 'Thursday', 5: 'Tuesday', 6: 'Thursday', 7: 'Saturday'}, 'base_date': {0: datetime.date(2019, 1, 21), 1: datetime.date(2019, 1, 22), 2: datetime.date(2019, 1, 23), 3: datetime.date(2019, 1, 23), 4: datetime.date(2019, 1, 24), 5: datetime.date(2019, 1, 22), 6: datetime.date(2019, 1, 24), 7: datetime.date(2019, 1, 26)}}
example['base_date'] = pd.to_datetime(example['base_date'].astype(str), format='%d%m%Y')
example['base_date'] = example['base_date'].dt.date

您可以使用
idxmin

pd.to_datetime(df.loc[df['class'] == 'C', 'base_date']).idxmin()
# 2

df.iloc[pd.to_datetime(df.loc[df['class'] == 'C', 'base_date']).idxmin()]

slot_id               3
class                 C
day           Wednesday
base_date    2019-01-23
Name: 2, dtype: object

如果需要重复执行此操作,更好的解决方案是将“基准日期”预转换为
datetime
type:

df['base_date'] = pd.to_datetime(df['base_date'], errors='coerce')
df.iloc[df.loc[df['class'] == 'C', 'base_date'].idxmin()]

slot_id                        3
class                          C
day                    Wednesday
base_date    2019-01-23 00:00:00
Name: 2, dtype: object

这成功了!:-)然而,您将如何处理更多的日期变量,例如,如果您希望基本日期的最小值以及日期变量2的子集为最大值。您是否必须单独使用idxmin和idxmax,或者可以将它们混合在一行中?@user3507584您想要两个单独的行?或者您想要一行,其中col1是最小的,col2是最大的?我想知道如何使用更多的日期时间变量来子集。如果在df.iloc中使用索引(.idxmin),那么它只能引用一个变量,对吗?如果您有第二个日期时间变量,那么看起来您必须使用df.iloc两次,一次用于正在子集的每个日期时间变量。我说的对吗?@user3507584嗯,我还是很难跟上。如果你能用一些输入和预期的输出来回答一个后续问题,那就太好了,这样我就可以确切地知道如何帮助你了。(请考虑标记这个接受,如果它解决了你的问题,如最初定义。)@ USER 3507854看起来像Wen Ben一样称重。如果你在这个问题上还需要任何帮助,请告诉我,我会看看我能做些什么。
df['base_date'] = pd.to_datetime(df['base_date'], errors='coerce')
df.iloc[df.loc[df['class'] == 'C', 'base_date'].idxmin()]

slot_id                        3
class                          C
day                    Wednesday
base_date    2019-01-23 00:00:00
Name: 2, dtype: object