Python:删除数据帧的行并保留特定组

Python:删除数据帧的行并保留特定组,python,pandas,dataframe,duplicates,rows,Python,Pandas,Dataframe,Duplicates,Rows,这个问题仍然没有得到回答 假设我有这个数据帧: 作为pd进口熊猫 Name = ['ID', 'Country', 'IBAN','ID_bal_amt', 'ID_bal_time','Dan_city','ID_bal_mod','Dan_country','ID_bal_type', 'ID_bal_amt', 'ID_bal_time','ID_bal_mod','ID_bal_type' ,'Dan_sex', 'Dan_Age', 'Dan_country','Dan_sex' ,

这个问题仍然没有得到回答

假设我有这个数据帧:

作为pd进口熊猫

Name = ['ID', 'Country', 'IBAN','ID_bal_amt', 'ID_bal_time','Dan_city','ID_bal_mod','Dan_country','ID_bal_type', 'ID_bal_amt', 'ID_bal_time','ID_bal_mod','ID_bal_type' ,'Dan_sex', 'Dan_Age', 'Dan_country','Dan_sex' , 'Dan_city','Dan_country','ID_bal_amt', 'ID_bal_time','ID_bal_mod','ID_bal_type' ]
Value = ['TAMARA_CO', 'GERMANY','FR56', '12','June','Berlin','OPBD', '55','CRDT','432', 'August', 'CLBD','DBT', 'M', '22', 'FRA', 'M', 'Madrid', 'ESP','432','March','FABD','CRDT']
Ccy = ['','','','EUR','EUR','','EUR','','','','EUR','EUR','USD','USD','USD','','CHF', '','DKN','','','USD','CHF']
Group = ['0','0','0','1','1','1','1','1','1','2','2','2','2','2','2','2','3','3','3','4','4','4','4']

df = pd.DataFrame({'Name':Name, 'Value' : Value, 'Ccy' : Ccy,'Group':Group})

print(df)

          Name      Value  Ccy Group
0            ID  TAMARA_CO          0
1       Country    GERMANY          0
2          IBAN       FR56          0
3    ID_bal_amt         12  EUR     1
4   ID_bal_time       June  EUR     1
5      Dan_city     Berlin          1
6    ID_bal_mod       OPBD  EUR     1
7   Dan_country         55          1
8   ID_bal_type       CRDT          1
9    ID_bal_amt        432          2
10  ID_bal_time     August  EUR     2
11   ID_bal_mod       CLBD  EUR     2
12  ID_bal_type        DBT  USD     2
13      Dan_sex          M  USD     2
14      Dan_Age         22  USD     2
15  Dan_country        FRA          2
16      Dan_sex          M  CHF     3
17     Dan_city     Madrid          3
18  Dan_country        ESP  DKN     3
19   ID_bal_amt        432          4
20  ID_bal_time      March          4
21   ID_bal_mod       FABD  USD     4
22  ID_bal_type       CRDT  CHF     4
我想减少这个数据帧!我希望通过将在模式“CLBD”下关联的行组保持为“bal”,从而仅减少包含字符串“bal”的行。这意味着我在“CLBD”值中搜索名称“ID_bal_mod”,然后保留同一组中的所有其他名称ID_bal_amt、ID_bal_time、ID_bal_mod、ID_bal_type。在我们的示例中,是组2中的名称

此外,我想将列“Group”中的值更改为0

因此,在最后,我想得到这个新的数据帧,其中索引也被重置

          Name      Value  Ccy Group
0            ID  TAMARA_CO          0
1       Country    GERMANY          0
2          IBAN       FR56          0
3      Dan_city     Berlin          1
4   Dan_country         55          1
5    ID_bal_amt        432          0
6   ID_bal_time     August  EUR     0
7    ID_bal_mod       CLBD  EUR     0
8   ID_bal_type        DBT  USD     0
9       Dan_sex          M  USD     2
10      Dan_Age         22  USD     2
11  Dan_country        FRA          2
12      Dan_sex          M  CHF     3
13     Dan_city     Madrid          3
14  Dan_country        ESP  DKN     3
有人有有效的想法吗? 谢谢

让我们试试你的逻辑:

rows_with_bal = df['Name'].str.contains('bal')
groups_with_CLBD = ((rows_with_bal & df['Value'].eq('CLBD')) 
                    .groupby(df['Group']).transform('any')
                   )

# set the `Group` to 0 for `groups_with_CLBD`
df.loc[groups_with_CLBD, 'Group'] = 0

# keep the rows without bal or `groups_with_CLBD`
df = df.loc[(~rows_with_bal) | groups_with_CLBD]
输出:

           Name      Value  Ccy Group
0            ID  TAMARA_CO          0
1       Country    GERMANY          0
2          IBAN       FR56          0
5      Dan_city     Berlin          1
7   Dan_country         55          1
9    ID_bal_amt        432          0
10  ID_bal_time     August  EUR     0
11   ID_bal_mod       CLBD  EUR     0
12  ID_bal_type        DBT  USD     0
13      Dan_sex          M  USD     0
14      Dan_Age         22  USD     0
15  Dan_country        FRA          0
16      Dan_sex          M  CHF     3
17     Dan_city     Madrid          3
18  Dan_country        ESP  DKN     3

很抱歉,我认为它有效,但没有:您的代码更改了列组中所有不包含“bal”的其他名称的值。Dan_性别、Dan_年龄、Dan_国家应留在第2组。你知道我们该怎么改变吗?