首页 > 解决方案 > 循环查找索引中的关键字,如果找到,则将该行附加到 df。如果没有找到,追加空df

问题描述

我有不断变化df_x的数据框,有时我会在索引列中找到关键字(例如“债务”),有时却找不到。如果找到,则应采用整行并将其定义为新的 dataframe df_debtdebt如果在索引列中找不到关键字,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)

有人可以帮我吗?

谢谢你。

标签: pythonpandasdataframeloops

解决方案


根据您的描述,您将其复杂化了。这是一个直截了当的面具。条件赋值的注释代码与直接赋值完全相同。无需循环。


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: []


推荐阅读