2つのデータフレームがあるとしましょう。df1には4つの列が含まれています。「NAME」列には、都市の名前(A、B、C)が含まれています。他の各列は、その都市に住む人々の数を含む年(y0、y1、y2)を表します。
np.random.seed(seed=34)
name = ['A','B','C']
y0 = np.random.random_integers(1,high=40, size=3)
y1 = np.random.random_integers(1,high=40, size=3)
y2 = np.random.random_integers(1,high=40, size=3)
df = pd.DataFrame(data={'NAME' : name, 'y0' : y0, 'y1' : y1, 'y2' : y2})
df
NAME y0 y1 y2
0 A 34 36 15
1 B 22 6 30
2 C 5 12 19
df2には3つの列が含まれています。「NAME」列には、都市の名前が含まれています。「y」列には年の値(y0、y1、y2)が含まれ、「i」列にはインターネットにアクセスできる人の数が含まれます。
y = ['y0', 'y1', 'y2', 'y0', 'y1', 'y2', 'y0', 'y1', 'y2']
name2 = ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C']
i = [15, 6, 12, 18, 4, 20, 3, 8, 2]
df2 = pd.DataFrame(data={'NAME':name2, 'y':y, 'i':i})
df2
NAME y i
0 A y0 15
1 A y1 6
2 A y2 23
3 B y0 18
4 B y1 17
5 B y2 20
6 C y0 3
7 C y1 24
8 C y2 2
df2 ['NAME']の値がdf1 ['NAME']に等しく、df2 ['y']がdf1に等しいという条件で、df1の値を含む列をdf2に作成する必要があります。列、次の結果を取得するために:
NAME y i v
0 A y0 15 34
1 A y1 6 36
2 A y2 12 15
3 B y0 18 22
4 B y1 4 6
5 B y2 20 30
6 C y0 3 5
7 C y1 8 12
8 C y2 2 19
都市名がdfに表示される回数は一定ではありません。前もって感謝します。
値が一致するため、これを行うことができます。
df2['v'] = df.melt(col_level=0, id_vars='NAME').sort_values(by='NAME').reset_index(drop=True)['value']
出力:
NAME y i v
0 A y0 15 34
1 A y1 6 36
2 A y2 12 15
3 B y0 18 22
4 B y1 4 6
5 B y2 20 30
6 C y0 3 5
7 C y1 8 12
8 C y2 2 19
またはcombinefirstで
df3 = df.melt(col_level=0, id_vars='NAME').sort_values(by='NAME').reset_index(drop=True)
df3 = df3.rename(columns={'variable':'y'})
df3 = df2.combine_first(df3)
df3['value'] = df3['value'].astype(int)
NAME i value y
0 A 15 34 y0
1 A 6 36 y1
2 A 12 15 y2
3 B 18 22 y0
4 B 4 6 y1
5 B 20 30 y2
6 C 3 5 y0
7 C 8 12 y1
8 C 2 19 y2
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加