我有一个从Excel文件中读取的数据框,其中有合并的单元格。数据框看起来像这样。
希望将数据帧从长到宽重塑成这样。重塑所需结构
我使用pivot作为下面的代码。
df1 = df.pivot_table(
values='Answers',
index=['Date', 'ID'],
columns='Questions'
)
# Formatting.
df1.reset_index(inplace=True)
df1.columns.name = None
但pivot后的数据框只显示第一列,如下图所示。数据框在pivot之后
知道为什么吗?
问题是你的索引没有被熊猫正确理解(所有的NaNs)。
为了解决这个问题,你需要首先传播你的Date列中的值来填充NaN,这里已经回答了。潘达斯。阅读Excel的合并单元格.
>>> df = pd.DataFrame({"Date": ["2020-01-01", np.nan, np.nan, "2020-01-02", np.nan, np.nan], "Question": ["Q1", "Q2", "Q3", "Q1", "Q2", "Q3"], "Value": [1, 2, 3, 4, 5, 6]})
>>> df
Date Question Values
0 2020-01-01 Q1 1
1 NaN Q2 2
2 NaN Q3 3
3 2020-01-02 Q1 4
4 NaN Q2 5
5 NaN Q3 6
>>> df["Date"].fillna(method="ffill", inplace=True) # Fill Date column
>>> df
Date Question Values
0 2020-01-01 Q1 1
1 2020-01-01 Q2 2
2 2020-01-01 Q3 3
3 2020-01-02 Q1 4
4 2020-01-02 Q2 5
5 2020-01-02 Q3 6
>>> # Now you can pivot normally
>>> df1 = df.pivot_table(index="Date", values="Value", columns="Question")
>>> df1.reset_index(inplace=True)
>>> df1.columns.name = None
>>> df1
Date Q1 Q2 Q3
0 2020-01-01 1 2 3
1 2020-01-02 4 5 6
希望能帮到你;)