反转数据框中的行值

时间:2018-12-02 15:02:47

标签: python pandas python-2.7

如果我有这样的熊猫数据框:

 NaN  2   3  1  7  NaN  4
  5  NaN NaN 2  8   0   3
 NaN NaN NaN 4  7   9   3

和类似这样的数组:

 [3, -5, 4]

如何反转数组值为负的行中的熊猫数据框列?这样我就得到了这样的东西:

 NaN  2   3  1  7  NaN  4
  3   0   8  2 NaN NaN  5
 NaN NaN NaN 4  7   9   3

3 个答案:

答案 0 :(得分:0)

假设您要反转第二行。根据您的情况进行操作。

df.iloc[1] = df.iloc[1].tolist()[::-1]

答案 1 :(得分:0)

我相信您需要numpy.where并带有广播的布尔掩码,以通过索引建立带有负值的列表的负数:

L = [3, -5, 4]
mask = np.array(L)[:, None] < 0
df = pd.DataFrame(np.where(mask, df.values[:, ::-1], df.values),
                  index=df.index,
                  columns=df.columns)
print (df)
     0    1    2    3    4    5    6
0  NaN  2.0  3.0  1.0  7.0  NaN  4.0
1  3.0  0.0  8.0  2.0  NaN  NaN  5.0
2  NaN  NaN  NaN  4.0  7.0  9.0  3.0

答案 2 :(得分:0)

这是一个虚拟数据框:

df = pd.DataFrame(data=np.random.randint(-1, 10,size = (10, 7)), columns = ['a', 'b', 'c', 'd', 'e', 'f', 'g'])
df

   a    b   c   d   e   f   g
0   5   2   3   -1  5   7   0
1   1   9   1   6   1   3   6
2   1   1   7   4   -1  2   3
3   1   7   5   5   6   3   3
4   3   7   8   8   1   0   9
5   9   9   1   6   9   0   4
6   0   5   1   5   7   1   -1
7   4   4   8   7   7   3   1
8   5   -1  9   9   1   1   5
9   9   3   2   3   -1  3   0

如果要在索引8处反转:

df.loc[8] = df.loc[8][::-1].values
df
   a    b   c   d   e   f   g
0   5   2   3   -1  5   7   0
1   1   9   1   6   1   3   6
2   1   1   7   4   -1  2   3
3   1   7   5   5   6   3   3
4   3   7   8   8   1   0   9
5   9   9   1   6   9   0   4
6   0   5   1   5   7   1   -1
7   4   4   8   7   7   3   1
8   5   1   1   9   9   -1  5
9   9   3   2   3   -1  3   0