Chciałbym wstawić wiersze konkretnej dataframe raz w dwóch rzędach w innym konkretnym dataframe. Na koniec chciałbym to zrobić za kilka kolumn DF1 i DF2 (nie tylko D i E).

Mam dwa różne dataframes:

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                  index=[0, 1, 2, 3])

df2 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'E': ['E0', 'E1', 'E2', 'E3']},
                   index=[0, 1, 2, 3])

I chciałbym ich scalić

df3 = pd.DataFrame({'A': ['A0', 'A0', 'A1', 'A1', 'A2', 'A2', 'A3', 'A3'],
                    'B': ['B0', 'B0', 'B1', 'B1', 'B2', 'B2', 'B3', 'B3'],
                    'C': ['C0', 'C0', 'C1', 'C1', 'C2', 'C2', 'C3', 'C3'],
                    'D': ['D0', 'E0', 'D1', 'E1', 'D2', 'E2', 'D3', 'E3']},
                   index=[0, 1, 2, 3, 4, 5, 6, 7])
0
Virginie Ricci 9 wrzesień 2017, 19:36

2 odpowiedzi

Najlepsza odpowiedź

1) przy użyciu pd.concat i sort_index

In [1006]: (pd.concat([df1, df2.rename(columns={'E': 'D'})])
              .sort_index().reset_index(drop=True))
Out[1006]:
    A   B   C   D
0  A0  B0  C0  D0
1  A0  B0  C0  E0
2  A1  B1  C1  D1
3  A1  B1  C1  E1
4  A2  B2  C2  D2
5  A2  B2  C2  E2
6  A3  B3  C3  D3
7  A3  B3  C3  E3

2) lub, używając append i sort_index

In [1007]: df1.append(df2.rename(columns={'E': 'D'})).sort_index().reset_index(drop=True)
Out[1007]:
    A   B   C   D
0  A0  B0  C0  D0
1  A0  B0  C0  E0
2  A1  B1  C1  D1
3  A1  B1  C1  E1
4  A2  B2  C2  D2
5  A2  B2  C2  E2
6  A3  B3  C3  D3
7  A3  B3  C3  E3

Test

In [1009]: (pd.concat([df1, df2.rename(columns={'E': 'D'})])
              .sort_index().reset_index(drop=True)
              .equals(df3))
Out[1009]: True

In [1010]: pd.concat([df1, df2.rename(columns={'E': 'D'})]).equals(df3)
Out[1010]: False
0
Zero 9 wrzesień 2017, 16:57

Funkcja Concat umożliwia łączenie wielu dataframe:

frames = [df1, df2.rename(columns={'E': 'D'})]
pd.concat(frames)

Możesz dodatkowe dane danych do listy, ale będziesz musiał zmienić nazwy kolumn, aby poprawnie scalać.

0
Meow 9 wrzesień 2017, 16:49