python - 循环查找索引中的关键字,如果找到,则将该行附加到 df。如果没有找到,追加空df
问题描述
我有不断变化df_x
的数据框,有时我会在索引列中找到关键字(例如“债务”),有时却找不到。如果找到,则应采用整行并将其定义为新的 dataframe df_debt
。debt
如果在索引列中找不到关键字,df
则应采用空的预定义数据框df_debt
。现在df
每次都会附加空数据框,即使df_x
索引列中有关键字“债务”。
谁能帮我编辑下面的循环以首先搜索关键字,如果它不存在,那么只有空数据框才会被附加?
df_x
可能看起来像以下两种选择之一:
分解 | 第一年 | 第二年 | 第 3 年 |
---|---|---|---|
总资产 | 100 | 110 | 110 |
债务 | 90 | 85 | 80 |
总净额 | 100 | 100 | 100 |
分解 | 第一年 | 第二年 | 第 3 年 |
---|---|---|---|
当前资产 | 101 | 111 | 111 |
其他资产 | 91 | 86 | 81 |
总净额 | 101 | 101 | 101 |
#empty dataframe df which shall be taken for further processing if the row in the
#Breakdown index column of df_x is not found
df= pd.DataFrame(columns=['Year1', 'Year2','Year3'])
for i in df_x:
if idx.contains('Debt'):
df_debt= df_x.loc['Debt']
else:
df_debt= df_x.append(df)
有人可以帮我吗?
谢谢你。
解决方案
根据您的描述,您将其复杂化了。这是一个直截了当的面具。条件赋值的注释代码与直接赋值完全相同。无需循环。
df_x = pd.DataFrame({'Breakdown': ['Total Assets', 'Debt', 'Total Net'],
'Year1': [100, 90, 100],
'Year2': [110, 85, 100],
'Year3': [110, 80, 100]}).set_index("Breakdown")
df_x2 = pd.DataFrame({'Breakdown': ['Curr Assets', 'Other Assets', 'Total Net'],
'Year1': [101, 91, 101],
'Year2': [111, 86, 101],
'Year3': [111, 81, 101]}).set_index("Breakdown")
def debt(df_x):
mask = df_x.index=="Debt"
return df_x.loc[mask] #if mask.any() else pd.DataFrame(columns=['Year1', 'Year2','Year3'])
print(debt(df_x))
print(debt(df_x2))
输出
Year1 Year2 Year3
Breakdown
Debt 90 85 80
Empty DataFrame
Columns: [Year1, Year2, Year3]
Index: []
推荐阅读
- css - 苗条故事书的包装器元素
- excel - Excel:Vlookup 复制和粘贴 VBA 循环
- css - 如何删除由 CSS Grid 创建的大空白
- javascript - 反应原生 Firestore。“数组包含”查询不适用于数值
- c++ - 将复制构造函数设置为 private 和 =delete 有什么区别?
- javascript - React 传单 - 如何使用 useLeaflet 添加自定义组件
- sql - SQL - 获取设备连续正常运行时间
- node.js - 使用nodejs将角度部署到heroku
- python - 带有 Matplotlib 标签位置的 Sankey
- python - 带有 Geopandas 的地图:Shapefile 坐标以百万计