【问题标题】:How to rename timestamp column names to string/object in multiindex dataframe using python如何使用python将时间戳列名重命名为多索引数据框中的字符串/对象
【发布时间】:2021-08-31 07:05:18
【问题描述】:

数据帧:df

None  | A  B   volumeshare    volumeshare
X     |         2020-10-1      2020-11-1
---------------------------------------
0     | e1 f1      12            65    
1     | e1 f2      23            20     
2     | e1 f3      0             91    
3     | e2 f1      76            3     
4     | e2 f2      89            33    

我希望实现以下目标-

  1. 只有顶行以 X、A、B、2020-10-1、2020-11-1 作为列名的顺序排列。
  2. 第 3 列和第 4 列有时间戳名称(2020-10-1 和 2020-11-1),需要分别替换为字符串为 Oct-20 和 Nov-20。

预期输出

X     | A   B      Oct-20       Nov-20
---------------------------------------
0     | e1 f1      12            65    
1     | e1 f2      23            20     
2     | e1 f3      0             91    
3     | e2 f1      76            3     
4     | e2 f2      89            33    

【问题讨论】:

  • 你能把df.head().to_dict()的输出贴出来吗?
  • df.head().to_dict() = {('A', ''): {0: 'e1', 1: 'e1', 2: 'e1', 3: ' e2', 4: 'e2'}, ('B', ''): {0: 'f1', 1: 'f2', 2: 'f3', 3: 'f1', 4: 'f2'} , ('volumeshare', Timestamp('2020-10-01 00:00:00')): {0:12, 1:23, 2:0, 3:76, 4:89}, ('volshare',时间戳('2020-11-01 00:00:00')): {65, 1: 20, 2: 91, 3: 3, 4: 33}}

标签: python pandas dataframe multi-index data-wrangling


【解决方案1】:

在列表推导中使用自定义 lambda 函数:

def f(a, b):
    d = pd.to_datetime(b, errors='coerce')
    return d.strftime('%b-%y') if pd.notna(d) else a
   
df.columns = [f(a, b) for a, b in df.columns]
print (df)
    A   B  Oct-20  Nov-20
0  e1  f1      12      65
1  e1  f2      23      20
2  e1  f3       0      91
3  e2  f1      76       3
4  e2  f2      89      33

【讨论】:

    猜你喜欢
    • 2019-07-20
    • 2017-08-26
    • 1970-01-01
    • 2018-01-25
    • 2022-12-30
    • 1970-01-01
    • 2022-09-26
    • 2015-06-04
    • 2013-12-30
    相关资源
    最近更新 更多