嗨,我想将两个列的值附加到一个列中,如下图所示。 有人可以帮我吗?
| t1 | t2 | v1 | v2 |
|------|------|----|----|
| 0.0 | 10 | 1 | -1 |
| 0.42 | 0.78 | 1 | -1 |
新数据框
| t1,t2 combined | v1,v2 combined |
|----------------|----------------|
| 0.0 | 1 |
| 0.42 | 1 |
| 10 | -1 |
| 0.78 | -1 |
答案 0 :(得分:4)
pd.wide_to_long应该可以工作:
df['value'] = list(range(0,2))
pd.wide_to_long(df, stubnames=['t', 'v'], i='value', j='dropme', sep='').reset_index().drop(columns=['value', 'dropme'])
t v
0 0.00 1
1 0.42 1
2 10.00 -1
3 0.78 -1
答案 1 :(得分:0)
我认为您要搜索的词是串联的。
data = [
[0.0, 10, 1, -1],
[0.42, 0.78, 1, -1]
]
df = pd.DataFrame(data, columns=['t1', 't2', 'v1', 'v2'])
v1 = df.set_index('t1')['v1'].rename('v')
v1.index.name = 't'
v2 = df.set_index('t2')['v2'].rename('v')
v2.index.name = 't'
combined = pd.concat([v1, v2])
print(combined)
输出:
t
0.00 1
0.42 1
10.00 -1
0.78 -1
Name: v, dtype: int64
结果表明,在串联序列时,不需要匹配索引和列名。因此,在存在n组一致命名的列的设置中,这可以实现以下结果:
combined = pd.concat([df.set_index(f"t{i}")[f"v{i}"] for i in range(1, 3)])
print(combined)
输出:
0.00 1
0.42 1
10.00 -1
0.78 -1
dtype: int64
唯一的区别是所得的序列未命名。
答案 2 :(得分:0)
如果您要寻找一支班轮
df[['t1', 'v1']].append(df[['t2', 'v2']].rename(columns={'t2': 't1', 'v2': 'v1'}), ignore_index=True)