-1
votes

Apportez les données de la table matricielle aux lignes groupées par date

J'ai un ensemble de données qui ressemble à ceci, ce sont essentiellement des bénéfices sur 10, 11 et 12 xxx pré>

et une autre trame de données: p>

Date       Item        A.unit    A.Profit   B.Unit  B.Profit  C.Unit     C.Profit   D.Unit      D.Profit 
10/11       A,D          5          30          0     10         0         5           12            15
11/11       A,B,C       10           12         10     5         5         25           0            10
12/11       A           20          10           0     15        0         10            0           18


1 commentaires

Faire une nouvelle colonne appelée A.Profit et copier les valeurs de la première ligne de l'élément après la transposition pourraient être une manière.


3 Réponses :


0
votes
newdf = pd.concat([df1.transpose(), df2], axis=1)

0 commentaires

0
votes

Données source
df2.merge(df1.T.rename(columns = {c: str(c)+'.Profit' for c in df1.T.columns}), left_index = True, right_index = True)

Out[3]:

           Item   A.unit    B.Unit  C.Unit  D.Unit  A.Profit    B.Profit    C.Profit    D.Profit
Date                                    
10/11   A,D     5       0       0       12       30         10          5           15
11/11   A,B,C   10      10      5       0        12         5           25          10
12/11   A       20      0       0       0        10         15          10          18


9 commentaires

Je reçois cette erreur lors de l'exécution de «type (s) d'opérande non supporté (s) pour +: 'int' et 'str'" - @Alexey


J'ai mis à jour le code. Vous cherchez que le type de nom de colonnes est INT. Donc je mets str (c). Pourriez-vous le vérifier à nouveau?


Salut @Alexey toujours je ne reçois toujours pas de valeurs correctes, seule la table vierge vient avec des colonnes totales de 156, colonnes sont comme 101.Profit, 102.Profit ......


@Singh Sonu, Bonjour, j'ai juste mis la préparation des données source dans le code, pour vous faire tester et comparer les différences qui ont provoqué les erreurs.


@ Alexey- J'utilise deux fichiers Excel pour importer les données .. Dans ce cas, quel sera DD1 et DD2


Dans ce cas, vous n'avez pas besoin d'utiliser DD1 et DD2. DD1 et DD2 doivent préparer les mêmes exemples de Dataframe. Dans votre cas, vous devriez comparer le Dataframe qui vient de votre Excel avec Datafreme dans mes exemples. Je pense que vous devriez utiliser quelque chose comme ceci: df1 = pd.read_excel ('fileName1.xlsx', index_col = 'Item') df2 = pd.read_excel ('FileName2.xlsx', index_col = "date")


Dans ce cas, je reçois 0rowsx156Col, aucune valeur


Si possible, pourriez-vous donner ici la sortie des deux commandes: DF1.ILOC [: 2,:]. TO_DICT () et DF2.ILOC [: 2,:]. TO_DICT () ou peut ne faire que partie, comme DF1. ILOC [: 2 ,:: 10] .TO_DICT () et DF1.ILOC [: 2,: 10] .TO_DICT ()


{'Article': {0: 'A', 1: 'B'}, DateTime.DateTime (2019, 10, 21, 0, 0): {0: 67, 1: 67}, DateTime.DateTime (2019, 10, 22, 0, 0): {0: 67, 1: 67}, DateTime.DateTime (2019, 10, 23, 0, 0): {0: 67, 1: 67}, DateTime.DateTime (2019, 10, 24, 0, 0): {0: 67, 1: 67}, DateTime.DateTime (2019, 10, 25, 0, 0): {0: 68, 1: 68}, DateTime.DateTime (2019, 10, 26, 0, 0): {0: 71, 1: 71}} - DF1.ILOC [: 2,: 10] .à_dict ()



1
votes

solution si élément code> dans le premier df1 code> n'est pas index et Date code> en seconde n'est pas index:

print (df1.index)
Index(['A', 'B', 'C', 'D'], dtype='object', name='Item')

print (df2.index)
Index(['10/11', '11/11', '12/11'], dtype='object', name='Date')

df11 = df1.T.add_suffix('.Profit')
df = df2.merge(df11, left_index=True, right_index=True).reset_index()

cols = sorted(df.columns[2:], key=lambda x: x.split('.')[0])
df = df[df.columns[:2].tolist() + cols]


1 commentaires

Les commentaires ne sont pas pour une discussion prolongée; Cette conversation a été Déplacé pour discuter .