[英]pandas dataframe convert columns as rows
I am looking for a way to convert my dataframe columns as rows. 我正在寻找一种将数据框列转换为行的方法。 Following is my example dataframe:
以下是我的示例数据框:
mylist= [['xx'], [None, 'yy'], ['xx', None], ['xx',None],['xx','yy']]
pd.DataFrame(mylist,index=['A','B','C','D','E'],columns=['Col1','Col2'])
Input DataFrame: 输入数据框:
-------------------
Ind | Col1 | Col2 |
-------------------
A | xx | None |
B | None | yy |
C | xx | None |
D | xx | None |
E | xx | yy |
-------------------
I want to split my columns as separate rows in the dataframe. 我想将列拆分为数据帧中的单独行。 Below is how my desired output looks like.
下面是我想要的输出的样子。 Can anyone suggest how to acheive the following.
任何人都可以建议如何实现以下目标。
Desired dataframe: 所需的数据框:
------------------------
Ind | Values | Columns |
------------------------
A | xx | Col1 |
B | yy | Col2 |
C | xx | Col1 |
D | xx | Col1 |
E | xx | Col1 |
E | xx | Col2 |
------------------------
Thanks, 谢谢,
Rtut 鲁特
Another option is to use melt
: 另一种选择是使用
melt
:
longDf = pd.melt(df.reset_index(), id_vars=['index'], var_name=['Columns'])
longDf[pd.notnull(longDf.value)]
index Columns value
0 A Col1 xx
2 C Col1 xx
3 D Col1 xx
4 E Col1 xx
6 B Col2 yy
9 E Col2 yy
df = pd.DataFrame(mylist,index=['A','B','C','D','E'],columns=['Col1','Col2'])
# rotate df
stacked_df = pd.DataFrame(df.stack().reset_index())
# name columns
stacked_df.columns = ['Ind','Columns','Values']
# reorder columns
reordered_df = pd.DataFrame(stacked_df,columns=['Ind','Values','Columns'])
Results in: 结果是:
>>> reordered_df
Ind Values Columns
0 A xx Col1
1 B yy Col2
2 C xx Col1
3 D xx Col1
4 E xx Col1
5 E yy Col2
In the case of two values, it appears that you only want the first (eg the last row of your example). 对于两个值,似乎只需要第一个(例如,示例的最后一行)。
You can use loc
to first set the second value to None in the case both columns have values. 如果两个列都有值,则可以使用
loc
首先将第二个值设置为None。
df.loc[(df.Col1.notnull()) & (df.Col2.notnull()), 'Col2'] = None
You can then melt your results. 然后,您可以融合您的结果。
>>> pd.melt(df.reset_index(), id_vars='index', var_name='Columns', value_name='Values'
).dropna().set_index('index')[['Values', 'Columns']]
Values Columns
index
A xx Col1
C xx Col1
D xx Col1
E xx Col1
B yy Col2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.