按二进制列值重塑 Pandas DatafRames
Reshape Pandas DatafRames by binary columns value
无法弄清楚如何通过多个二进制列值将我的 DataFrame 重塑为新的 DataFrame。
输入:
data code a b c
2016-01-07 foo 0 0 0
2016-01-12 bar 0 0 1
2016-01-03 gar 0 1 0
2016-01-22 foo 1 1 0
2016-01-26 bar 1 1 0
我想按二进制值重塑,即列 a/b/c,如果它们的值 == 1,我每次都需要新列
包含所有数据。
预期输出:
data code
a 2016-01-22 foo
a 2016-01-26 bar
b 2016-01-03 gar
b 2016-01-22 foo
b 2016-01-26 bar
c 2016-01-12 bar
从早上卡在这里,非常感谢帮助!
使用DataFrame.melt
with filtering 1
in boolean indexing
, DataFrame.pop
用于过滤后去除柱子:
df = df.melt(['data','code'], var_name='type')
df = df[df.pop('value').eq(1)]
print (df)
data code type
3 2016-01-22 foo a
4 2016-01-26 bar a
7 2016-01-03 gar b
8 2016-01-22 foo b
9 2016-01-26 bar b
11 2016-01-12 bar c
无法弄清楚如何通过多个二进制列值将我的 DataFrame 重塑为新的 DataFrame。
输入:
data code a b c
2016-01-07 foo 0 0 0
2016-01-12 bar 0 0 1
2016-01-03 gar 0 1 0
2016-01-22 foo 1 1 0
2016-01-26 bar 1 1 0
我想按二进制值重塑,即列 a/b/c,如果它们的值 == 1,我每次都需要新列 包含所有数据。
预期输出:
data code
a 2016-01-22 foo
a 2016-01-26 bar
b 2016-01-03 gar
b 2016-01-22 foo
b 2016-01-26 bar
c 2016-01-12 bar
从早上卡在这里,非常感谢帮助!
使用DataFrame.melt
with filtering 1
in boolean indexing
, DataFrame.pop
用于过滤后去除柱子:
df = df.melt(['data','code'], var_name='type')
df = df[df.pop('value').eq(1)]
print (df)
data code type
3 2016-01-22 foo a
4 2016-01-26 bar a
7 2016-01-03 gar b
8 2016-01-22 foo b
9 2016-01-26 bar b
11 2016-01-12 bar c