繁体   English   中英

如何在熊猫数据框的子集中搜索出现值的行

[英]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_col1Key_col2Key_col3 )(因为“ info”列可能包含很多键的值)。

然后,将TimestampInfo列添加到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM