请问有关此事的帮助?什么是执行此任务的最pythonic或最简单的方法?我认为这可以通过熔化或堆叠来完成,但是我无法做到。非常感谢您的帮助。非常感谢。
data = [['1',np.nan,np.nan],['2',np.nan,np.nan],[np.nan,'3',np.nan],
[np.nan,'3',np.nan],[np.nan,'3',np.nan],[np.nan,np.nan,'15'],[np.nan,np.nan,'15']]
df = pd.DataFrame(data,columns=['no','number', 'numbers'])
df
no number numbers
0 1 NaN NaN
1 2 NaN NaN
2 NaN 3 NaN
3 NaN 3 NaN
4 NaN 3 NaN
5 NaN NaN 15
6 NaN NaN 15
Result = [['1'],['2'],['3'],['3'],['3'],['15'],['15']]
Expected = pd.DataFrame(Result, columns = ['NUMBER'])
Expected
NUMBER
0 1
1 2
2 3
3 3
4 3
5 15
6 15
答案 0 :(得分:1)
将stack
与reset_index
一起使用,并将Series
转换为一列DataFrame
函数to_frame
:
df = df.stack().reset_index(drop=True).to_frame('NUMBER')
print (df)
NUMBER
0 1
1 2
2 3
3 3
4 3
5 15
6 15
编辑:
data = [['1','100',np.nan],['2',np.nan,np.nan],[np.nan,'3',np.nan],
[np.nan,'3',np.nan],[np.nan,'3',np.nan],[np.nan,np.nan,'15'],
[np.nan,np.nan,'15']]
df = pd.DataFrame(data,columns=['no','number', 'numbers'])
print (df)
no number numbers
0 1 100 NaN
1 2 NaN NaN
2 NaN 3 NaN
3 NaN 3 NaN
4 NaN 3 NaN
5 NaN NaN 15
6 NaN NaN 15
如果要每行第一个非数字值:
df1 = df.bfill(axis=1).iloc[:, 0].to_frame('NUMBER')
print (df1)
NUMBER
0 1
1 2
2 3
3 3
4 3
5 15
6 15
如果需要所有非数值:
df2 = df.stack().reset_index(drop=True).to_frame('NUMBER')
print (df2)
NUMBER
0 1
1 100
2 2
3 3
4 3
5 3
6 15
7 15