跨数据框列的Python Min(),其dtype列为period ['M']

问题描述 投票:0回答:1

我正在尝试找出各列之间的最小(不丢失)值,并且列的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'

用于生成数据框的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

熊猫版本:'1.0.1'

谢谢!

python pandas min
1个回答
0
投票

它似乎是错误,可能的解决方案:

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
© www.soinside.com 2019 - 2024. All rights reserved.