J'ai un bloc de données comme celui-ci:
A B 0 M M 1 2 2 2 3 3 A B 0 N N 1 20 20 2 30 30
et je dois diviser le bloc de données verticalement par index de ligne 0 = 'M' et 'N':
>df = pd.DataFrame({'A':['M',2,3],'B':['M',2,3],'AA':['N',20,30],'BB':['N',20,30]})
>df = df.rename(columns={df.columns[2]: 'A'})
>df = df.rename(columns={df.columns[3]: 'B'})
>df
A B A B
0 M M N N
1 2 2 20 20
2 3 3 30 30
Les données du bloc de données proviennent d'une feuille Excel et les noms de colonnes ne sont pas uniques. Merci pour votre aide!
3 Réponses :
Utilisez pandas iloc pour sélectionner les colonnes:
= ^ .. ^ =
A B
0 M M
1 2 2
2 3 3
A B
0 N N
1 20 20
2 30 30
Résultat:
import pandas as pd
df = pd.DataFrame({'A':['M',2,3],'B':['M',2,3],'AA':['N',20,30],'BB':['N',20,30]})
df = df.rename(columns={df.columns[2]: 'A'})
df = df.rename(columns={df.columns[3]: 'B'})
df1 = df.iloc[:, :2]
df2 = df.iloc[:, 2:]
p>
Utilisez compréhension de liste avec loc comme:
dfs = [df.loc[:, df.loc[0,:].eq(s)] for s in ['M','N']]
Cela donne des cadres de données séparés dans la liste.
Cela devrait faire le travail:
df.loc[:,df.iloc[0, :] == "M"] df.loc[:,df.iloc[0, :] == "N"]
vous avez besoin de diviser les données en 2 trames de données séparées?
Avez-vous essayé iloc?