Python 比较列表的列

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 =

当列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 = 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,以获得解决方案。是否可以将循环更改为比较数据帧中的列而不是原始数据上的列?感谢您的解决方案。是否可以将循环更改为比较数据帧中的列而不是原始数据上的列?