use*_*146 5 python dataframe pandas
假设我有一个像这样的数据框
ID,Time1,Value1,Time2,Value2,Time3,Value3
1,2,1.1,3,1.2,4,1.3
1,5,2.1,6,2.2,7,2.3
Run Code Online (Sandbox Code Playgroud)
预期的数据框是这样的
ID,Time,Value
1,2,1.1
1,3,1.2
1,4,1.3
1,5,2.1
1,6,2.2
1,7,2.3
Run Code Online (Sandbox Code Playgroud)
如果该行具有唯一的 id,则pd.wide_to_long在这种情况下效果很好。
df = pd.wide_to_long(df, ['Time',Value],'ID','value', sep='', suffix='.+')\
.reset_index()\
.sort_values(['ID', 'Time'])\
.drop('value', axis=1)\
.dropna(how='any')
Run Code Online (Sandbox Code Playgroud)
但如果行的 ID 不唯一,如何解决这种情况
技巧用于reset_index唯一值列:
df = (pd.wide_to_long(df.reset_index(), ['Time','Value'],i='index',j='value')
.reset_index(drop=True)
.sort_values(['ID', 'Time'])
.dropna(how='any')
)
print (df)
ID Time Value
0 1 2 1.1
2 1 3 1.2
4 1 4 1.3
1 1 5 2.1
3 1 6 2.2
5 1 7 2.3
Run Code Online (Sandbox Code Playgroud)
细节:
print (pd.wide_to_long(df.reset_index(), ['Time','Value'],i='index',j='value'))
ID Time Value
index value
0 1 1 2 1.1
1 1 1 5 2.1
0 2 1 3 1.2
1 2 1 6 2.2
0 3 1 4 1.3
1 3 1 7 2.3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3359 次 |
| 最近记录: |