首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨数据框列的Python Min(),其中列的dtype为period['M']

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

Stack Overflow用户
提问于 2020-05-06 22:51:06
回答 1查看 34关注 0票数 1

我正在尝试找出跨列的最小(非缺失)值,并且列的dtype为.period'M‘。我使用了如下代码: df['p1','p2','p3'].min(axis=1),但结果并不像预期的那样。

输入数据帧:

代码语言:javascript
复制
p1 p2 p3
NaT NaT '2019-10'
NaT '2018-04' '2019-01'
NaT '2019-10' '2019-11'
'2017-01' '2018-12' '2016-12'

所需输出:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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')

我试过了:

代码语言:javascript
复制
df['min_p'] = df[['p1','p2','p3']].min(axis=1,skipna=True)

我得到的结果是(为什么skina不工作?):min_p inf inf 2016-12

Pandas版本:'1.0.1‘

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-06 22:56:49

它看起来像是bug,可能的解决方案是使用DataFrame.stack删除NaN,并按第一级重塑和min (原始索引值):

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61638280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档