我有一个包含许多列的数据框。一列可能有NaN
。在这种情况下,可以在下一列中找到该值。
为简化起见...这在这里:
In[1]:
d = {'col1': [1, 2, 3],
'col2': [5, np.nan, np.nan],
'col3': [55, 9, 22]}
df = pd.DataFrame(data=d)
print(tabulate(df, headers = 'keys', tablefmt = 'psql'))
Out[1]:
+----+--------+--------+--------+
| | col1 | col2 | col3 |
|----+--------+--------+--------|
| 0 | 1 | 5 | 55 |
| 1 | 2 | nan | 9 |
| 2 | 3 | nan | 22 |
+----+--------+--------+--------+
应该在这里变成这样:
In[2]:
d = {'col1': [1, 2, 3],
'col2': [5, 9, 22],
'col3': [55, 9, 22]}
df = pd.DataFrame(data=d)
print(tabulate(df, headers = 'keys', tablefmt = 'psql'))
Out[2]:
+----+--------+--------+--------+
| | col1 | col2 | col3 |
|----+--------+--------+--------|
| 0 | 1 | 5 | 55 |
| 1 | 2 | 9 | <== 9 | # col3's value copied to col2
| 2 | 3 | 22 | <== 22 | # col3's value copied to col2
+----+--------+--------+--------+
我尝试了这个(没有成功):
df.loc[ df['col2'].isna() ] = df[ df['col2'].isna() ]['col3']
有什么建议吗?
答案 0 :(得分:2)
您需要按行向后填充:
df.bfill(axis=1)
# col1 col2 col3
#0 1.0 5.0 55.0
#1 2.0 9.0 9.0
#2 3.0 22.0 22.0
答案 1 :(得分:1)
是的,您只能使用 threadpool thread_pool;
map<Key, Value> map;
for (const std::pair<Key, Value> & element : map) {
thread_pool.Add([](const Value& value) {
} (element);
}
thread_pool.Join();
np.where
用于使用df.col2=np.where(df.col2.isna(),df.col3,df.col2)
df
Out[535]:
col1 col2 col3
0 1 5.0 55
1 2 9.0 9
2 3 22.0 22
.loc
答案 2 :(得分:1)
还
d['col2'].fillna(d['col3'], inplace = True)