【发布时间】:2022-01-10 02:07:46
【问题描述】:
我有一个数据框可以转为更长的时间:
import pandas as pd
import io
_1 = pd.read_csv(io.StringIO(
"""date; origin; val_one; val_two; aaa; bbb; ccc; ddd; eee; fff
10/11/2009; aaa; 1; 0; 0; 0; 0; 0; 1; 0
10/11/2009; bbb; 0; 1; 1; 0; 0; 0; 0; 1
10/11/2009; ccc; 0; 1; 0; 0; 0; 0; 0; 0
10/11/2009; ddd; 0; 2; 0; 1; 1; 1; 0; 0"""),
sep=";").set_axis(['date', 'origin', 'val_one', 'val_two',
'aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff'], axis=1)
我现在想创建 origin-target (rows aaa:fff) dyads。应该删除不存在目标的行(即没有一个目标列是1,例如第三行,索引 2);存在多个目标的行(例如,第二行,索引 1,其中aaa 是1 和fff 是目标列之一是1)应该变成两行。预期的输出是:
_2_targ = pd.read_csv(io.StringIO(
"""date; origin; val_one; val_two; target
10/11/2009; aaa; 1; 0; eee
10/11/2009; bbb; 0; 1; aaa
10/11/2009; bbb; 0; 1; fff
10/11/2009; ddd; 0; 2; bbb
10/11/2009; ddd; 0; 2; ccc
10/11/2009; ddd; 0; 2; ddd"""),
sep=';').set_axis(['date', 'origin', 'val_one', 'val_two', 'target'])
我尝试使用 pd.melt 无济于事(见下文) - 这会创建 所有 对偶,甚至是我不想保留的那些(因为没有目标列是 1) .
_2 = pd.melt(_1,
id_vars=['date', 'origin', 'val_one', 'val_two'],
value_vars=['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff'],
var_name='target', value_name='tmp')
我错过了什么?
【问题讨论】:
-
output = _2[_2["tmp"].gt(0]].drop("tmp",1)