如何根据列值移动某些行?

时间:2017-06-15 17:24:12

标签: python csv pandas dataframe

假设我有一个看起来像这样的DataFrame:

A  B  C  D
X  5  6  5
Y  3  1  2
X  9  7  5
   3  5  2
9  8  7  NaN
5  2  2  NaN
X  4  3  1
Y  3  2  1
6  8  0  NaN

注意,在A列中,某些值是字母(即X,Y)。在A列中,还有值应在B列中(即数字)。我如何在熊猫中指明:

  • 对于非X,Y或Empty的每个值,将特定行移过1列。

我想要的输出是:

A  B  C  D
X  5  6  5
Y  3  1  2
X  9  7  5
   3  5  2
   9  8  7 
   5  2  2 
X  4  3  1
Y  3  2  1
   6  8  0

即便是这样的事情对我也有用:

A  B  C  D  E
X  5  6  5  
Y  3  1  2 
X  9  7  5  
   3  5  2  NaN
   9  8  7  NaN
   5  2  2  NaN
X  4  3  1  
Y  3  2  1  
   6  8  0  NaN

应该有某种功能可以说,对于X,Y或空的每个值,忽略和数字转换的那些......反之亦然。

任何提示都将不胜感激!

基本上:我怎么说;任何不是这些特定值的东西,拿走那一行并将所有东西都移过来?

1 个答案:

答案 0 :(得分:1)

我的方法是将DataFrame转换为列表列表,然后将空元素插入到没有X,Y或''的每一行中。

df = df.values.tolist()
for row in df:
    if row[0] not in ['X', 'Y', '']:
        row.insert(0, '')
result = pd.DataFrame(df, columns=list('ABCDE')

<强>输出:

   A  B  C    D   E
0  X  5  6  5.0 NaN
1  Y  3  1  2.0 NaN
2  X  9  7  5.0 NaN
3     3  5  2.0 NaN
4     9  8  7.0 NaN
5     5  2  2.0 NaN
6  X  4  3  1.0 NaN
7  Y  3  2  1.0 NaN
8     6  8  0.0 NaN