通过比较具有多个条件的两个数据帧来获取特定的行值
Get a specific row value by comparasion of two dataFrames with multiple conditions
==============
我有一个第一个 DataFrame df1,它看起来像这样:
Name
Location
Bob
Paris
Bob
Berlin
Alice
Paris
Alice
Miami
Toto
NYC
Bob
NYC
Mark
Berlin
Joe
Paris
...
...
然后我有第二个 DataFrame df2 看起来也像这样:
Name
Location
Value
Alice
Paris
0.3
Bob
Paris
0.2
Bob
Berlin
0.4
Alice
Miami
0.1
Lucas
NYC
0.0
...
...
...
我想创建一个函数 searchedValue()
,它在新列 ["SEARCHEDVALUE"]
中实现我的 df1
的每一行,并在这两个条件下使用相应的 df2["VALUE"]
:
通过检查 df1["NAME"]
是否在 df2
and
如果 df1["LOCATION"]
在我的 df2
中,那么 return df2
VALUE 对应于匹配行...否则return 找不到匹配项
我知道我可以使用类似这样的东西来实现我的专栏:
df1["SearchedValue"] = df2.apply(searchedValue)
但我还没有找到构建我的函数的解决方案。
感谢您的帮助
数据:
df = pd.DataFrame({'Name': {0: 'Bob', 1: 'Bob', 2: 'Alice', 3: 'Alice', 4: 'Toto'},
'Location': {0: 'Paris', 1: 'Berlin', 2: 'Paris', 3: 'Miami', 4: 'NYC'}})
df:
Name Location
0 Bob Paris
1 Bob Berlin
2 Alice Paris
3 Alice Miami
4 Toto NYC
df2 = pd.DataFrame({'Name': {0: 'Bob', 1: 'Bob', 2: 'Alice', 3: 'Alice', 4: 'Lucas'},
'Location': {0: 'Paris', 1: 'Berlin', 2: 'Paris', 3: 'Miami', 4: 'NYC'},
'Value': {0: 0.3, 1: 0.2, 2: 0.4, 3: 0.1, 4: 0.0}})
df2:
Name Location Value
0 Bob Paris 0.3
1 Bob Berlin 0.2
2 Alice Paris 0.4
3 Alice Miami 0.1
4 Lucas NYC 0.0
def searchedValue(Name, Location):
merged = df.merge(df2, on=["Name", "Location"])
result = merged[(merged.Name == Name) & (merged.Location == Location)]
if not result.size:
return "No match found"
return f"The Value is: {result['Value'].iloc[0]}"
print(searchedValue("Alice", "Paris"))
print(searchedValue("Alice", "Miami"))
print(searchedValue("Alice", "NOOOOOOOOO"))
The Value is: 0.4
The Value is: 0.1
No match found
==============
我有一个第一个 DataFrame df1,它看起来像这样:
Name | Location |
---|---|
Bob | Paris |
Bob | Berlin |
Alice | Paris |
Alice | Miami |
Toto | NYC |
Bob | NYC |
Mark | Berlin |
Joe | Paris |
... | ... |
然后我有第二个 DataFrame df2 看起来也像这样:
Name | Location | Value |
---|---|---|
Alice | Paris | 0.3 |
Bob | Paris | 0.2 |
Bob | Berlin | 0.4 |
Alice | Miami | 0.1 |
Lucas | NYC | 0.0 |
... | ... | ... |
我想创建一个函数 searchedValue()
,它在新列 ["SEARCHEDVALUE"]
中实现我的 df1
的每一行,并在这两个条件下使用相应的 df2["VALUE"]
:
通过检查 df1["NAME"]
是否在 df2
and
如果 df1["LOCATION"]
在我的 df2
中,那么 return df2
VALUE 对应于匹配行...否则return 找不到匹配项
我知道我可以使用类似这样的东西来实现我的专栏:
df1["SearchedValue"] = df2.apply(searchedValue)
但我还没有找到构建我的函数的解决方案。
感谢您的帮助
数据:
df = pd.DataFrame({'Name': {0: 'Bob', 1: 'Bob', 2: 'Alice', 3: 'Alice', 4: 'Toto'},
'Location': {0: 'Paris', 1: 'Berlin', 2: 'Paris', 3: 'Miami', 4: 'NYC'}})
df:
Name Location
0 Bob Paris
1 Bob Berlin
2 Alice Paris
3 Alice Miami
4 Toto NYC
df2 = pd.DataFrame({'Name': {0: 'Bob', 1: 'Bob', 2: 'Alice', 3: 'Alice', 4: 'Lucas'},
'Location': {0: 'Paris', 1: 'Berlin', 2: 'Paris', 3: 'Miami', 4: 'NYC'},
'Value': {0: 0.3, 1: 0.2, 2: 0.4, 3: 0.1, 4: 0.0}})
df2:
Name Location Value
0 Bob Paris 0.3
1 Bob Berlin 0.2
2 Alice Paris 0.4
3 Alice Miami 0.1
4 Lucas NYC 0.0
def searchedValue(Name, Location):
merged = df.merge(df2, on=["Name", "Location"])
result = merged[(merged.Name == Name) & (merged.Location == Location)]
if not result.size:
return "No match found"
return f"The Value is: {result['Value'].iloc[0]}"
print(searchedValue("Alice", "Paris"))
print(searchedValue("Alice", "Miami"))
print(searchedValue("Alice", "NOOOOOOOOO"))
The Value is: 0.4
The Value is: 0.1
No match found