在 df 中插入一组新的标题,但保留现有的标题并将它们设置为第一行数据
Posted
技术标签:
【中文标题】在 df 中插入一组新的标题,但保留现有的标题并将它们设置为第一行数据【英文标题】:Insert a new set of headers in a df but preserve the existing headers and set them to the first row of data 【发布时间】:2019-10-10 16:45:56 【问题描述】:希望修改 df:
Test_Data = [
('Client', ['A','B','C']),
('2018-11', [10,20,30]),
('2018-12', [10, 20, 30]),
]
df = pd.DataFrame(dict(Test_Data))
print(df)
Client 2018-11 2018-12
0 A 10 10
1 B 20 20
2 C 30 30
期望的输出:
Report_Mongo Client Month_1 Month_2
0 Client 2018-11 2018-12
1 A 10 10
2 B 20 20
3 C 30 30
所以将现有标题下移一行并插入新标题:
c = ['Report_Mongo','client', 'Month_1', 'Month_2']
【问题讨论】:
类似this? 嗨@cs95,需要第一行而不是多索引 【参考方案1】:我建议创建 MultiIndex
以防止在 DataFrame 中将数字与字符串数据混合:
c = ['Report_Mongo','client', 'Month_1', 'Month_2']
#get columns by list without first element
df.columns = [c[1:], df.columns]
#get first element to names of columns
df.columns.names = (c[0], '')
print(df)
Report_Mongo client Month_1 Month_2
Client 2018-11 2018-12
0 A 10 10
1 B 20 20
2 C 30 30
如果需要逐列第一行,append
是可能的,但最可取的是第一个解决方案:
c = ['Report_Mongo','client', 'Month_1', 'Month_2']
df = df.columns.to_frame().T.append(df, ignore_index=True)
df.columns = c[1:]
df.columns.name = c[0]
print(df)
Report_Mongo client Month_1 Month_2
0 Client 2018-11 2018-12
1 A 10 10
2 B 20 20
3 C 30 30
【讨论】:
谢谢@jezrael。奇怪的请求,但它适合一些疯狂的 Django 遗留代码。以上是关于在 df 中插入一组新的标题,但保留现有的标题并将它们设置为第一行数据的主要内容,如果未能解决你的问题,请参考以下文章
c# 多线程字典 - 使用一组新的值最佳实践刷新实时字典。创建新的字典,还是逐项重新加载旧的字典? [关闭]
Canonical 近日发布了一组新的 Linux 内核安全更新