Python 通过在数据库中查找另一个数据帧来填充数据帧

Python 通过在数据库中查找另一个数据帧来填充数据帧,python,pandas,dataframe,ipython,nan,Python,Pandas,Dataframe,Ipython,Nan,我有一个熊猫数据帧(df),如下所示: AccountName AccountName2 DateTime abc guest 2016-06-10 20:46 guest 2016-06-10 21:32 def 2016-06-10 23:11 2016-06-10 23:31 ghi

我有一个熊猫数据帧(df),如下所示:

AccountName   AccountName2  DateTime
abc           guest         2016-06-10 20:46
              guest         2016-06-10 21:32
def                         2016-06-10 23:11
                            2016-06-10 23:31
ghi                         2016-06-10 24:41
我需要基于上述数据帧导出一个新的数据帧(df1)。df1应该有两个字段,ResultAccount和DateTime

if(df["AccountName"] != ' '):
 df1["ResultAccount"] = df["AccountName"]
elif(df["AccountName2] != ' '):
 df1["ResultAccount"] = df["AccountName2"]
else:
 df1["ResultAccount"] = "none"
这是我遵循的方法,但是
df1
并没有按预期填充。任何帮助都将不胜感激。

我认为您可以先将带有空格的字符串
'
添加到
NaN
,然后
应用
自定义函数
f
。输出是来自
系列
ResultAccount
df.DateTime
Dataframe

import pandas as pd
import numpy as np

df = pd.DataFrame({'AccountName2': {0: 'guest', 1: 'guest', 2: ' ', 3: ' ', 4: ' '}, 
                   'DateTime': {0: '2016-06-10 20:46', 1: '2016-06-10 21:32', 2: '2016-06-10 23:11', 3: '2016-06-10 23:31', 4: '2016-06-10 24:41'}, 
                   'AccountName': {0: 'abc', 1: ' ', 2: 'def', 3: ' ', 4: 'ghi'}})

print (df)
  AccountName AccountName2          DateTime
0         abc        guest  2016-06-10 20:46
1                    guest  2016-06-10 21:32
2         def               2016-06-10 23:11
3                           2016-06-10 23:31
4         ghi               2016-06-10 24:41
我想你可以先用空格
'
将字符串改为
NaN
,然后用
应用
自定义函数
f
。输出是来自
系列
ResultAccount
df.DateTime
Dataframe

import pandas as pd
import numpy as np

df = pd.DataFrame({'AccountName2': {0: 'guest', 1: 'guest', 2: ' ', 3: ' ', 4: ' '}, 
                   'DateTime': {0: '2016-06-10 20:46', 1: '2016-06-10 21:32', 2: '2016-06-10 23:11', 3: '2016-06-10 23:31', 4: '2016-06-10 24:41'}, 
                   'AccountName': {0: 'abc', 1: ' ', 2: 'def', 3: ' ', 4: 'ghi'}})

print (df)
  AccountName AccountName2          DateTime
0         abc        guest  2016-06-10 20:46
1                    guest  2016-06-10 21:32
2         def               2016-06-10 23:11
3                           2016-06-10 23:31
4         ghi               2016-06-10 24:41
你可以用。它是
np的多条件泛化。其中

import numpy as np
import pandas as pd
df = pd.DataFrame(
    {'AccountName': ['abc', ' ', 'def', ' ', 'ghi'],
     'AccountName2': ['guest', 'guest', ' ', ' ', ' '],
     'DateTime': ['2016-06-10 20:46', '2016-06-10 21:32', '2016-06-10 23:11', '2016-06-10 23:31', '2016-06-10 24:41']})

conditions = [df['AccountName'] != ' ', df['AccountName2'] != ' ']
choices = [df["AccountName"], df["AccountName2"]]
df['ResultAccount'] = np.select(conditions, choices, default='none')
屈服

  AccountName AccountName2          DateTime ResultAccount
0         abc        guest  2016-06-10 20:46           abc
1                    guest  2016-06-10 21:32         guest
2         def               2016-06-10 23:11           def
3                           2016-06-10 23:31          none
4         ghi               2016-06-10 24:41           ghi
你可以用。它是
np的多条件泛化。其中

import numpy as np
import pandas as pd
df = pd.DataFrame(
    {'AccountName': ['abc', ' ', 'def', ' ', 'ghi'],
     'AccountName2': ['guest', 'guest', ' ', ' ', ' '],
     'DateTime': ['2016-06-10 20:46', '2016-06-10 21:32', '2016-06-10 23:11', '2016-06-10 23:31', '2016-06-10 24:41']})

conditions = [df['AccountName'] != ' ', df['AccountName2'] != ' ']
choices = [df["AccountName"], df["AccountName2"]]
df['ResultAccount'] = np.select(conditions, choices, default='none')
屈服

  AccountName AccountName2          DateTime ResultAccount
0         abc        guest  2016-06-10 20:46           abc
1                    guest  2016-06-10 21:32         guest
2         def               2016-06-10 23:11           def
3                           2016-06-10 23:31          none
4         ghi               2016-06-10 24:41           ghi

非常感谢。当存在AccountName时,将填充ResultAccount。它不适用于其他2种情况-即如果AccountName为null且AccountName2包含内容,则ResultAccount是AccountName2中的内容。另外,如果两者都为空,它不会填充“none”。好吧,也许我遗漏了什么。列
ResultAccount
的期望输出是什么?它不必基于哪个列必须是第一列。对不起,如果我没有把我的问题说清楚的话。要填充“ResultAccount”,首先应检查(AccountName!=null),如果是,则ResultAccount=AccountName。Else ResultAccount=AccountName2.对不起,我有点困惑。什么是期望输出?列
ResultAccount
中有哪些值?所需的输出是您在回答中给出的,但我在应用函数时没有得到。“abc”、“def”和“ghi”按预期填充,但“来宾”和“无”未填充。谢谢。当存在AccountName时,将填充ResultAccount。它不适用于其他2种情况-即如果AccountName为null且AccountName2包含内容,则ResultAccount是AccountName2中的内容。另外,如果两者都为空,它不会填充“none”。好吧,也许我遗漏了什么。列
ResultAccount
的期望输出是什么?它不必基于哪个列必须是第一列。对不起,如果我没有把我的问题说清楚的话。要填充“ResultAccount”,首先应检查(AccountName!=null),如果是,则ResultAccount=AccountName。Else ResultAccount=AccountName2.对不起,我有点困惑。什么是期望输出?列
ResultAccount
中有哪些值?所需的输出是您在回答中给出的,但我在应用函数时没有得到。“abc”、“def”和“ghi”按预期填充,但“guest”和“None”未填充。请回答此问题。请回答此问题