我有一个整洁的Dataframe(我不确定如何从头开始制作),例如:
signal condition epoch time value
0 A 0 -1100 0.12
1 A 0 -1080 0.09
2 A 0 -1060 0.08
...
有几个条件A,B,C
。我希望获得一个带有multiindex的DataFrame,并将value
列的值作为新(且唯一)列A, B, C
中的值,所以最后它看起来像:
value A B C
epoch time
0 -1100 0.12 0.23 0.09
-1080 0.09 0.22 0.10
-1060 0.08 0.19 0.06
...
我尝试先将除value
之外的所有内容放入索引set_index(['condition','epoch','time'])
然后transpose或枢轴,但无法以某种方式将其设置为正确(转置为我提供了分层列和pivot KeyError)
我试过了例如:df.pivot(('epoch','time'),'condition')
答案 0 :(得分:1)
试
df.set_index(['epoch', 'time', 'condition']).value.unstack().rename_axis('value', 1)
value A B C
epoch time
0 -1100 0.12 0.23 0.09
-1080 0.09 0.22 0.10
-1060 0.08 0.19 0.06
设置
import pandas as pd
from io import StringIO
txt = """signal condition epoch time value
0 A 0 -1100 0.12
1 A 0 -1080 0.09
2 A 0 -1060 0.08
0 B 0 -1100 0.23
1 B 0 -1080 0.22
2 B 0 -1060 0.19
0 C 0 -1100 0.09
1 C 0 -1080 0.10
2 C 0 -1060 0.06 """
df = pd.read_csv(StringIO(txt), delim_whitespace=True)
答案 1 :(得分:1)
使用明确设计用于此类长到宽转换的pivot
,您走在正确的轨道上:
# show dummy df
print(df)
signal condition epoch time value
0 0 A 0 -1100 0.12
1 1 A 0 -1080 0.09
2 2 A 0 -1060 0.08
3 0 B 0 -1100 0.42
4 1 B 0 -1080 0.29
5 2 B 0 -1060 0.18
6 0 C 0 -1100 0.32
7 1 C 0 -1080 0.59
8 2 C 0 -1060 0.38
# pivot
pd.pivot_table(df, values="value", columns="condition", index=["epoch", "time"])
condition A B C
epoch time
0 -1100 0.12 0.42 0.32
-1080 0.09 0.29 0.59
-1060 0.08 0.18 0.38