Python Min() across dataframe columns with columns dtype as period['M']
Python Min() across dataframe columns with columns dtype as period['M']
我试图找出跨列的最小(非缺失)值,并且列的 dtype 为 .period['M']。我使用的代码如下: df[['p1','p2','p3']].min(axis=1) ,但结果不如预期。
输入数据帧:
p1 p2 p3
NaT NaT '2019-10'
NaT '2018-04' '2019-01'
NaT '2019-10' '2019-11'
'2017-01' '2018-12' '2016-12'
期望的输出:
p1 p2 p3 min_p
NaT NaT '2019-10' '2019-10'
NaT '2018-04' '2019-01' '2018-04'
NaT '2019-10' '2019-11' '2019-10'
'2017-01' NaT '2016-12' '2016-12'
生成Dataframe的DDL:
df = pd.DataFrame({'p1': ['','','2019-10'],
'p2': ['','2018-04','2019-01'],
'p3': ['2017-01','','2016-12']})
df['p1'] = pd.PeriodIndex(pd.to_datetime(df['p1'],format='%Y-%m'),freq='M')
df['p2'] = pd.PeriodIndex(pd.to_datetime(df['p2'],format='%Y-%m'),freq='M')
df['p3'] = pd.PeriodIndex(pd.to_datetime(df['p3'],format='%Y-%m'),freq='M')
我试过:
df['min_p'] = df[['p1','p2','p3']].min(axis=1,skipna=True)
我得到的结果是(为什么 skina 不起作用???):
min_p
信息
信息
2016-12
Pandas版本:'1.0.1'
谢谢!
它看起来像错误,可能的解决方案是 DataFrame.stack
删除 NaN
s 并重塑和每个第一级 min
(原始索引值):
df['min_p'] = df[['p1','p2','p3']].stack().min(level=0)
print (df)
p1 p2 p3 min_p
0 NaT NaT 2017-01 2017-01
1 NaT 2018-04 NaT 2018-04
2 2019-10 2019-01 2016-12 2016-12
我试图找出跨列的最小(非缺失)值,并且列的 dtype 为 .period['M']。我使用的代码如下: df[['p1','p2','p3']].min(axis=1) ,但结果不如预期。
输入数据帧:
p1 p2 p3
NaT NaT '2019-10'
NaT '2018-04' '2019-01'
NaT '2019-10' '2019-11'
'2017-01' '2018-12' '2016-12'
期望的输出:
p1 p2 p3 min_p
NaT NaT '2019-10' '2019-10'
NaT '2018-04' '2019-01' '2018-04'
NaT '2019-10' '2019-11' '2019-10'
'2017-01' NaT '2016-12' '2016-12'
生成Dataframe的DDL:
df = pd.DataFrame({'p1': ['','','2019-10'],
'p2': ['','2018-04','2019-01'],
'p3': ['2017-01','','2016-12']})
df['p1'] = pd.PeriodIndex(pd.to_datetime(df['p1'],format='%Y-%m'),freq='M')
df['p2'] = pd.PeriodIndex(pd.to_datetime(df['p2'],format='%Y-%m'),freq='M')
df['p3'] = pd.PeriodIndex(pd.to_datetime(df['p3'],format='%Y-%m'),freq='M')
我试过:
df['min_p'] = df[['p1','p2','p3']].min(axis=1,skipna=True)
我得到的结果是(为什么 skina 不起作用???): min_p 信息 信息 2016-12
Pandas版本:'1.0.1'
谢谢!
它看起来像错误,可能的解决方案是 DataFrame.stack
删除 NaN
s 并重塑和每个第一级 min
(原始索引值):
df['min_p'] = df[['p1','p2','p3']].stack().min(level=0)
print (df)
p1 p2 p3 min_p
0 NaT NaT 2017-01 2017-01
1 NaT 2018-04 NaT 2018-04
2 2019-10 2019-01 2016-12 2016-12