我想根据另一列的条件替换 DataFrame 的一列中的 NaN。如果在 [0]
列中有“Passenger-Kilometers”,我想在该行的另一列 [1]
的 NaN 中填充值“Total Passenger Transport”,如 {{1} 的索引 14 } 下面(对于其他 NaN 有一个替代方法,请参阅下面的映射 df
)。如果在下面尝试这个循环,它在每种情况下都有效,但我想找到一个更优雅的解决方案。
totals_dict
有没有更干净、更不同的方法来解决这个问题?
或者,我尝试过:
totals_dict = {"Passenger-Kilometers": "Total passenger transport",
"Freight Ton-Kilometers": "Total freight transport",}
for key, value in totals_dict.items():
df[df[0] == key] = df[df[0] == key].fillna(value)
但不幸的是,df = df.groupby(0).assign(target_col=lambda group: group["target_col"].fillna(totals_dict.get(group[0])))
对象不接受 groupby
作为方法。
assign
如下:
df
谢谢!
答案 0 :(得分:0)
假设我有这个数据框:
>>> a
0 1
0 Passenger-Kilometers Civil Aviation(100 million passenger-km)
1 Passenger-Kilometers Waterways(100 million passenger-km)
2 Passenger-Kilometers None
3 Passenger-Kilometers None
4 Passenger-Kilometers None
然后我可以运行以下命令:
def b(x):
x[1] = "hello"
return x
a[(a[0] == "Passenger-Kilometers") & (a[1].isnull())] = a[(a[0] == "Passenger-Kilometers") & (a[1].isnull())].apply(b, axis=1)
现在如果我看:
>>> a
0 1
0 Passenger-Kilometers Civil Aviation(100 million passenger-km)
1 Passenger-Kilometers Waterways(100 million passenger-km)
2 Passenger-Kilometers hello
3 Passenger-Kilometers hello
4 Passenger-Kilometers hello
所以你可以用你需要的任何东西替换“hello”