Python通用索引切片

Python通用索引切片,python,pandas,indexing,data-modeling,data-cleaning,Python,Pandas,Indexing,Data Modeling,Data Cleaning,希望有人能帮助我将Excel逻辑转换为python的逻辑 =IF(LEFT(A8,5)="Total",A9,I8) 因此,我希望找到某个范围内的所有内容,然后使用该范围内的第一个元素创建一个新列。问题是范围的名称可能会更改 我实现的当前解决方案是将列转换为索引,并通过执行以下操作手动选择“按索引名”: Sales = df.loc['1000 - Cash and Equivalents':'Total - 1000 - Cash and Equivalents'] 问题是这个名称可能会更

希望有人能帮助我将Excel逻辑转换为python的逻辑

=IF(LEFT(A8,5)="Total",A9,I8)
因此,我希望找到某个范围内的所有内容,然后使用该范围内的第一个元素创建一个新列。问题是范围的名称可能会更改

我实现的当前解决方案是将列转换为索引,并通过执行以下操作手动选择“按索引名”:

Sales = df.loc['1000 - Cash and Equivalents':'Total - 1000 - Cash and Equivalents']
问题是这个名称可能会更改,并且可能包含更少或更多行,并且需要使其更通用,因此我无法指定编号范围

这是一个数据示例:

转换后的数据如下所示:

Sales = df.loc['1000 - Cash and Equivalents':'Total - 1000 - Cash and Equivalents']
使用:

df = pd.read_csv('PL2.csv', encoding='cp1252', engine='python')


#create helper df for total strings
df1 = df.loc[df.iloc[:, 0].str.startswith('Total', na=False), df.columns[0]].to_frame('total')
#first column without Total - 
df1['first'] = df1['total'].str.replace('Total - ', '')
print (df1.head(10))
                                    total                          first
17                   Total - 4000 - Sales                   4000 - Sales
21  Total - 4200 - Discounts & Allowances  4200 - Discounts & Allowances
24       Total - 4400 - Excise and Duties       4400 - Excise and Duties
25                          Total - Sales                          Sales
37      Total - 5000 - Cost of Goods Sold      5000 - Cost of Goods Sold

#create index by first column
df = df.set_index(df.columns[0])

#filter function - if not matched return empty df
def get_dict(df, first, last):
    try:
        df = df.loc[first: last]
        df['Sub-Category'] = first
    except KeyError:
        df = pd.DataFrame()
    return df

#in dictionary comprehension create dict of DataFrames     
d = {k: get_dict(df, k, v) for k, v in zip(df1['first'], df1['total'])}
#print (d)

#select Sales df
print (d['Sales'])

如果您的解决方案
Sales=df.loc['1000-现金及等价物]:'Total-1000-现金及等价物]
无法使用,您希望输入什么?字符串
1000
?或者
现金和等价物
或者其他什么?是的,所以我将账户列作为熊猫的索引,并按索引名进行切片是的,它理解,但不确定你想要什么。我的excel知识很差,也没有你的excel数据,所以很难通过
=IF(LEFT(A8,5)=“Total”,A9,I8)
@jezrael来测试和猜测需要什么。这是我现在正在使用的代码,我希望你能从中看出我的目标是更好的,是
PL.csv
confidental吗?谢谢你@jezrael