简体   繁体   English

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

[英]Python : Dropping rows of a dataframe and keep a specific group

The question is still not answered !!!!问题还是没有回答!!!!!

Let's say that I have this dataframe :假设我有这个数据框:

import pandas as pd将熊猫导入为 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

I want to reduce this dataframe !我想减少这个数据框! I want to reduce only the rows that contains the string "bal" by keeping the group of rows that is associated at the the mode : "CLBD".我想通过保留与模式关联的行组来仅减少包含字符串“bal”的行:“CLBD”。 That means that I search the value "CLBD" for the the name "ID_bal_mod" and then I keep all the others names ID_bal_amt, ID_bal_time, ID_bal_mod, ID_bal_type that are in the same group.这意味着我搜索了名称“ID_bal_mod”的值“CLBD”,然后我保留了同一组中的所有其他名称 ID_bal_amt、ID_bal_time、ID_bal_mod、ID_bal_type。 In our example, it is the names that are in the group 2在我们的示例中,它是组 2 中的名称

In addition, I want to change the their value in the column "Group" to 0.另外,我想将“组”列中的值更改为 0。

So at the end I would like to get this new dataframe where the indexing is reset too所以最后我想得到这个新的数据帧,其中索引也被重置

          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

Anyone has an efficient idea ?任何人都有一个有效的想法? Thank you谢谢

Let's try your logic:让我们试试你的逻辑:

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]

Output:输出:

           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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM