【发布时间】:2021-06-09 08:10:18
【问题描述】:
考虑这些数据:
import pandas as pd
d = {
"id": [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3],
"col_to_fill": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
}
df = pd.DataFrame(d)
df
id col_to_fill
0 1 0
1 1 0
2 1 0
3 1 0
4 1 0
5 2 0
6 2 0
7 2 0
8 2 0
9 2 0
10 3 0
11 3 0
12 3 0
13 3 0
14 3 0
d1 = {
"id": [1, 2, 3],
"val1": [23, 23, 0],
"val2": [42, 44, 9],
"val3": [12, 8, 55],
"val4": [2, 88, 21],
"val5": [53, 2, 33]
}
df2 = pd.DataFrame(d1)
df2
id val1 val2 val3 val4 val5
0 1 23 42 12 2 53
1 2 23 44 8 88 2
2 3 0 9 55 21 33
在 df 中,我的行的 ID 对于每个唯一 ID 重复 N 次(在本例中 N=5,但希望它在实际用例中适用于 21 或任何可能的情况)。
在 df2 中,我在 col 1 中具有相同的唯一 ID,以及一些列值(val1、val2 等)
目标:
- 我希望 val1、val2、val3、val4、val5 在每个仪器的 df 中的每一行中向下。
对于 ID 1 和 2:
id col_to_fill
1 23
1 42
1 12
1 2
1 53
2 23
2 44
2 8
2 88
2 2
等等 ......
这行不通:
df2.melt(id_vars=['id'])
因为那会是
id variable
1 val1
1 val1
1 val1
1 val1
1 val1
2 val2
2 val2
2 val2
2 val2
2 val2
我需要:
id variable
1 val1
1 val2
1 val3
1 val4
1 val5
2 val1
2 val2
2 val3
2 val4
2 val5
【问题讨论】:
-
每个
id需要 5 行是否有意义?还是您只是想将所有列转换为行? -
@aneroid 它应该是 N 行,但总是有相同的 N 个 ID 被复制下来(即它们应该始终匹配)