Python 比较列表的列
当列A值的列表元素为NaN时,如何比较列B列表值和列A列表值,并保留列B列表值或将其更改为NaN 我试图搜索它,但只找到了类似的问题,然后在哪里用apply函数解决了,但我真的不知道它是如何工作的 下面是一个关于结尾的示例:Python 比较列表的列,python,python-3.x,pandas,Python,Python 3.x,Pandas,当列A值的列表元素为NaN时,如何比较列B列表值和列A列表值,并保留列B列表值或将其更改为NaN 我试图搜索它,但只找到了类似的问题,然后在哪里用apply函数解决了,但我真的不知道它是如何工作的 下面是一个关于结尾的示例: data = {"A":[[100, 333.3, np.NaN, np.NaN],[np.NaN, np.NaN,50, 25]], "B":[["A1", "A2", "A3", "A4"], ["B1", "B2", "B3", "B4"]]} df =
data = {"A":[[100, 333.3, np.NaN, np.NaN],[np.NaN, np.NaN,50, 25]],
"B":[["A1", "A2", "A3", "A4"], ["B1", "B2", "B3", "B4"]]}
df = pd.DataFrame(data=data)
输出应为:
A B
0 [100, 333.3, nan, nan] [A1, A2, nan, nan]
1 [nan, nan, 50, 25] [nan, nan, B3, B4]
使用for循环
df.B=[[s if t==t else np.nan for t,s in zip(x,y) ]for x , y in zip(df.A,df.B)]
df
Out[74]:
A B
0 [100, 333.3, nan, nan] [A1, A2, nan, nan]
1 [nan, nan, 50, 25] [nan, nan, B3, B4]
使用for循环
df.B=[[s if t==t else np.nan for t,s in zip(x,y) ]for x , y in zip(df.A,df.B)]
df
Out[74]:
A B
0 [100, 333.3, nan, nan] [A1, A2, nan, nan]
1 [nan, nan, 50, 25] [nan, nan, B3, B4]
您可以预处理数据:
import pandas as pd
import numpy as np
data = {"A":[[100, 333.3, np.NaN, np.NaN],[np.NaN, np.NaN,50, 25]],
"B":[["A1", "A2", "A3", "A4"], ["B1", "B2", "B3", "B4"]]}
# preprocess B and set np.NaN where needed:
b_data = data["B"]
for i,inner in enumerate(b_data):
for idx,value in enumerate(inner):
a = data["A"][i][idx]
inner[idx] = a if np.isnan(a) else value
df = pd.DataFrame(data=data)
print(df)
输出:
A B
0 [100, 333.3, nan, nan] [A1, A2, nan, nan]
1 [nan, nan, 50, 25] [nan, nan, B3, B4]
您可以预处理数据:
import pandas as pd
import numpy as np
data = {"A":[[100, 333.3, np.NaN, np.NaN],[np.NaN, np.NaN,50, 25]],
"B":[["A1", "A2", "A3", "A4"], ["B1", "B2", "B3", "B4"]]}
# preprocess B and set np.NaN where needed:
b_data = data["B"]
for i,inner in enumerate(b_data):
for idx,value in enumerate(inner):
a = data["A"][i][idx]
inner[idx] = a if np.isnan(a) else value
df = pd.DataFrame(data=data)
print(df)
输出:
A B
0 [100, 333.3, nan, nan] [A1, A2, nan, nan]
1 [nan, nan, 50, 25] [nan, nan, B3, B4]
基本思想是在每个列表上迭代,并检查在A中的相应位置是否有一个Nant。基本思想是在每个列表上迭代,并检查在A中的相应位置是否有一个Nant,以获得解决方案。是否可以将循环更改为比较数据帧中的列而不是原始数据上的列?感谢您的解决方案。是否可以将循环更改为比较数据帧中的列而不是原始数据上的列?