J'ai un ensemble de données qui ressemble à ceci, ce sont essentiellement des bénéfices sur 10, 11 et 12 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
3 Réponses :
newdf = pd.concat([df1.transpose(), df2], axis=1)
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
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 ()
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]
Les commentaires ne sont pas pour une discussion prolongée; Cette conversation a été Déplacé pour discuter .
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.