【发布时间】:2026-01-18 21:25:02
【问题描述】:
我的数据框如下,
_dict = {'t_head': ['H1', 'H2', 'H3', 'H4', 'H5','H6'],
'r_head': ['Revenue', 'Revenue', 'Income', 'Income', 'Cash', 'Expenses'],
'3ME__ Q219': [159.9, '', 45.6, '', '', ''],
'3ME__ Q218': [112.3, '', 27.2, '', '', ''],
'3ME__ Q119': [121.0, '', 23.1, '', '', ''],
'3ME__ Q18': [85.7, '', 15.3, '', '', ''],
'3ME__ Q418': [160.5, '', 51.1, '', '', ''],
'9ME__ Q417': [102.6, '', 24.2, '', '', ''],
'9ME__ Q318': [118.8, '', 30.2, '', '', ''],
'9ME__ Q317': [79.4, '', 15.3, '', '', ''],
'6ME__ Q219': ['', 280.9, '', 68.7, '', ''],
'6ME__ Q218': ['', 198.0, '', 42.6, '', ''],
'Q219': ['', '', '', '', 1305, 1239],
'Q418': ['', '', '', '', 2072, 1117]
}
df = pd.DataFrame.from_dict(_dict)
print(df)
t_head r_head 3ME__ Q219 3ME__ Q218 3ME__ Q119 3ME__ Q18 3ME__ Q418 9ME__ Q417 9ME__ Q318 9ME__ Q317 6ME__ Q219 6ME__ Q218 Q219 Q418
0 H1 Revenue 159.9 112.3 121 85.7 160.5 102.6 118.8 79.4
1 H2 Revenue 280.9 198
2 H3 Income 45.6 27.2 23.1 15.3 51.1 24.2 30.2 15.3
3 H4 Income 68.7 42.6
4 H5 Cash 1305 2072
5 H6 Expenses 1239 1117
我想根据列标题将此数据框拆分为多个数据框。这里的列标题可以以3ME__,6ME__,9ME__(all/any/none 可以存在)或其他值开头。我希望所有以3ME__ 开头的列都在一个数据框中,6ME__ 到另一个...等等。其余的都在第四个数据框中。
我尝试过的如下,
df1 = df.filter(regex='3ME__')
if not df1.empty:
df1 = df1[df1.iloc[:,0].astype(bool)]
df2 = df.filter(regex='6ME__')
if not df2.empty:
df2 = df2[df2.iloc[:,0].astype(bool)]
df3 = df.filter(regex='9ME__')
if not df3.empty:
df3 = df3[df3.iloc[:,0].astype(bool)]
在这里,我可以将以3ME__、6ME__ 和9ME__ 开头的列名过滤到不同的数据框,但无法将其余列标题添加到一个数据框。
1.) 如何将其余列标题放入一个数据框?
2.) 有没有更简单的方法可以将键和数据框作为值拆分成字典?
请帮忙。
【问题讨论】:
-
您是否尝试过使用 loc 明确命名要存储到新数据框中的列?
-
我无法重命名列,因为数据框是网络爬虫的输出。
-
不,我的意思是
new_df = df[['3ME__ Q219', '3ME__ Q218' .... '3ME__ Q21n']] -
如果列名不同,并且您只想检查“3ME”之类的“关键字”,请将您的 df 列名存储到列表中并按条目进行拆分,然后将哪个存储到新列表中名称返回真或假,然后使用这些列表使用它们在
df.colums中的索引来引用您的df@ -
@Joe,就像 webscraper 的输出一样,我不知道数据帧头会是什么。 dtataframe 可能包含也可能不包含以
3ME__,`6ME__'..etc 开头的列标题
标签: python python-3.x pandas dataframe dictionary