我有一个带有两列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
有什么办法可以做到这一点?
答案 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)