pandas - 转置和重新排列 Dataframe pandas

标签 pandas dataframe transpose

我需要一些帮助来重新排列数据框。这就是数据的样子。

Year  item 1  item 2  item 3
2001  22      54      33
2002  77      54      33
2003  22      NaN     33
2004  22      54      NaN

我想要的布局是:

Items   Year  Value
item 1  2001  22
item 1  2002  77
...

等等...

最佳答案

使用melt如果不需要,请删除 NaNs:

df = df.melt('Year', var_name='Items', value_name='Value')
print (df)
    Year   Items  Value
0   2001  item 1   22.0
1   2002  item 1   77.0
2   2003  item 1   22.0
3   2004  item 1   22.0
4   2001  item 2   54.0
5   2002  item 2   54.0
6   2003  item 2    NaN
7   2004  item 2   54.0
8   2001  item 3   33.0
9   2002  item 3   33.0
10  2003  item 3   33.0
11  2004  item 3    NaN

要删除 NaN,请添加 dropna :

df = df.melt('Year', var_name='Items', value_name='Value').dropna(subset=['Value'])
print (df)
    Year   Items  Value
0   2001  item 1   22.0
1   2002  item 1   77.0
2   2003  item 1   22.0
3   2004  item 1   22.0
4   2001  item 2   54.0
5   2002  item 2   54.0
7   2004  item 2   54.0
8   2001  item 3   33.0
9   2002  item 3   33.0
10  2003  item 3   33.0

对于删除 NaN 的稍微不同的排序,可以使用 set_index + stack + rename_axis + reset_index :

df = df.set_index('Year').stack().rename_axis(['Year','Items']).reset_index(name='Value')
print (df)
   Year   Items  Value
0  2001  item 1   22.0
1  2001  item 2   54.0
2  2001  item 3   33.0
3  2002  item 1   77.0
4  2002  item 2   54.0
5  2002  item 3   33.0
6  2003  item 1   22.0
7  2003  item 3   33.0
8  2004  item 1   22.0
9  2004  item 2   54.0

关于pandas - 转置和重新排列 Dataframe pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47431037/

相关文章:

r - 根据大于或小于前一列中的条件,向 R 中的数据框添加一列

python - 根据值是否存在于不同的 DataFrame 列中在 pandas DataFrame 中创建列

java - 如何在java中转置矩阵(并行/多线程)

computer-science - 求一个非常非常大的矩阵的转置

python - 如何重置多重索引?

python-3.x - 通过python中的多个条件合并不同数量的行和列

r - 是否有一种动态方法可以在数据帧中未知数量(即动态数量)的列上连接值?

Ruby attr_accessor 包装器返回 nil。

python - 如何根据pandas中的某些条件创建row_number

list - 从列表创建数据框