[英]How to fill column in pandas.DataFrame using data from another pandas.DataFrame?
[英]Fill NaNs of pandas.DataFrame based on condition over another column
我想根据另一列的条件替换 DataFrame 的一列中的 NaN。 如果在列[0]
中有“乘客公里”,我想在该行用值“总客运量”填充另一列[1]
的 NaN,如下面df
的索引 14 所示(有替代对于其他 NaN,请参阅下面的映射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 1
1 Vehicle Stock Medium Trucks(10000 units)
2 Vehicle Stock Heavy Trucks(10000 units)
3 Vehicle Stock Trucks(10000 units)
4 Vehicle Stock Mini Passenger Vehicles(10000 units)
5 Vehicle Stock Small Passenger Vehicles(10000 units)
6 Vehicle Stock Medium Passenger Vehicles(10000 units)
7 Vehicle Stock Light Trucks(10000 units)
8 Vehicle Stock Large Passenger Vehicles(10000 units)
9 Vehicle Stock Civil Vehicles(10000 units)
10 Passenger-Kilometers Civil Aviation(100 million passenger-km)
11 Passenger-Kilometers Waterways(100 million passenger-km)
12 Passenger-Kilometers Highways(100 million passenger-km)
13 Passenger-Kilometers Railways(100 million passenger-km)
14 Passenger-Kilometers None
15 Vehicle Stock Passenger Vehicles(10000 units)
谢谢!
假设我有这个 dataframe:
>>> 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
所以你可以用你需要的任何东西替换“你好”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.