使用Pandas将值从一列复制到另一列

时间:2018-06-26 09:41:37

标签: python pandas

我有一个带有两列X和Y的DataFrame:

   X      Y
0  0  111.0
1  3    NaN
2  1    NaN
3  1  112.0
4  2  113.0
5  2    NaN
6  3  114.0
7  3  115.0
8  1    NaN
9  2  116.0

我只想在Y中复制与NaN所在的行相对应的X的值。预期结果应该是这样

   X    Y
0  0  111
1  3    3
2  1    1
3  1  112
4  2  113
5  2    2
6  3  114
7  3  115
8  1    1
9  2  116

有什么办法可以做到这一点?

4 个答案:

答案 0 :(得分:0)

使用df["Y"].fillna(df["X"])

例如:

import pandas as pd
import numpy as np
df = pd.DataFrame({"X": [3, 4, 5, 6], "Y": [10, np.nan, 7, np.nan]})
df["Y"] = df["Y"].fillna(df["X"])
print(df)

输出:

   X     Y
0  3  10.0
1  4   4.0
2  5   7.0
3  6   6.0

答案 1 :(得分:0)

这里有一个班轮:

df.loc[df['Y'].isnull(), 'Y'] = df['X']

答案 2 :(得分:0)

您可以简单地使用熊猫提供的fillna()函数来非常有效地解决此问题。

下面的代码说明了如何在Python中进行操作。

df = pd.DataFrame()

df['X'] = [0, 3, 1, 1, 2, 2, 3, 3, 1, 2]
df['Y'] = [111.0, np.nan, np.nan, 112, 113, np.nan, 114, 115, np.nan, 116]

df['Y'] = df['Y'].fillna(df['X'])

print(df)

答案 3 :(得分:0)

另一种方式:

class App extends React.Component {
  constructor(props) {
    super(props)

    this.state = {
      logoUrl: null
    }
  }

  getLogo() {
    const userId = fire.auth().currentUser.uid

    fire.database().ref('/clients/' + userId).once('value')
      .then(function(snapshot) {

        let companyID = (snapshot.val().companyID) || 'Anonymous'

        fire.database().ref('/company/' + companyID)
          .once('value')
          .then(function(snapshot) {
            const logoUrl = snapshot.val().logo
            this.setState({
              logoUrl
            })
          })

      })
  }

  componentDidMount() {
    this.getLogo()
  }

  render() {
    return this.state.logoUrl ? <img src={this.state.logoUrl} /> : <div>Loading ...</div>
  }

}

输出:

df['Y'] = [row[-2] if row[-1]=='Nan' else row[-1] for row in df.itertuples()]
print(df)