[英]How to search subset of a pandas dataframe for the row in which a value occurs
我有两个dataframes
,例如
import pandas as pd
import numpy as np
from random import shuffle
df_data = pd.DataFrame(data=np.random.randint(low=0, high=10, size=(10,3)), columns=['A', 'B', 'C'])
keys = np.arange(0, 10)
shuffle(keys)
df_data['keys'] = keys
key_data = pd.DataFrame(data=np.reshape(np.arange(1,10), (3,3)), columns=['Key_col1', 'Key_col2', 'Key_col3'])
key_data['Timestamp'], key_data['Info'] = ['Mon', 'Wed', 'Fri'], [13, 2, 47]
返回,如下所示:
A B C keys
0 3 9 2 5
1 7 9 4 7
2 9 6 6 0
3 9 9 0 9
4 8 5 8 6
5 2 5 7 3
6 5 1 2 4
7 3 9 6 2
8 4 2 3 8
9 6 5 5 1
和这个:
Key_col1 Key_col2 Key_col3 Timestamp Info
0 1 2 3 Mon 13
1 4 5 6 Wed 2
2 7 8 9 Fri 47
我想在第一个数据帧中使用“ keys
”列来搜索第二个数据帧中的唯一键列(即Key_col1
, Key_col2
, Key_col3
)(因为“ info”列可能包含很多键的值)。
然后,将Timestamp
和Info
列添加到key
匹配的行中。
第0行的预期输出为:
A B C keys Timestamp Info
0 3 9 2 5 Wed 2
我的方法是首先为我的key_df的一个子集获取值:
key_data.iloc[:, 0:3] == 2
OUT
Key_col1 Key_col2 Key_col3
0 False True False
1 False False False
2 False False False
在下一步中,我尝试使用df.loc
仅返回出现值True
的行。
key_data.loc[:, key_data.iloc[:, 0:3] == 2]
但这会导致错误ValueError: Cannot index with multidimensional key
有人可以帮助我返回出现值True
的行,以便可以使用此索引选择将数据附加到何处吗?
谢谢
编辑:键是唯一的,并且它们全都出现在3个键列中的1个中。
这对您有效,只需将列重命名即可:
new_df = pd.merge(df_data, key_data, how= 'right', left_on=['keys','keys','keys'], right_on = ['Key_col1','Key_col2','Key_col3'])
new_df =new_df.dropna(axis=1, how='all')
有人可以帮助我返回出现值True的行,以便可以使用此索引选择将数据附加到何处吗?
这个问题的答案是key_data.loc[(key_data.iloc[:, 0:3] == 2).any(axis=1)]
,但是对于您的更大目标,像Rahul Agarwal所建议的那样进行合并更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.