簡體   English   中英

遍歷 Pandas 數據幀中的行以查找其他文件中的值並提取索引

[英]Iterate over rows in Pandas dataframe to find values in other file and extract index

我有一個 csv 文件作為大熊貓數據框導入,文件名在一列中。 我有另一個文件,它是一個 numpy 數組,其中具有相同的文件名但索引不同。 你能幫我遍歷 csv 文件中的文件名以在 numpy 文件中找到匹配項並提取文件名在 numpy 文件中的索引嗎?

例如:

d = {'col1': ["Apple", "Peach"], 'col2': [3, 4]}
>>> df = pd.DataFrame(data=d)
>>> df
   col1  col2
0     Apple 3
1     Peach 4

b = np.array(["Apple", "Banana", "Pear", "Peach"])
b
array(['Apple', 'Banana', 'Pear', 'Peach'], dtype='<U6')

現在我想現在從 df 中的每個項目在它們在數組中的索引處,這樣我就可以在另一個數組中的那個位置附加一些東西。

我試過這樣的事情:

for i,j in df:
    if j in b:
        print(b.get_loc)

IIUC,我們可以將 array 和 df 轉換為以索引為鍵的字典,並使用函數來查找匹配對:

import collections as colls

import numpy as np
import pandas as pd

d = {'col_1': ['Apple', 'Peach'], 'col_2': [3, 4]}
df = pd.DataFrame(data=d)
b = np.array(['Apple', 'Banana', 'Pear', 'Peach'])

d_1 = df['col_1'].to_dict()
d_2 = dict(enumerate(b))


def dicts_to_tuples(*dicts):
    result = colls.defaultdict(list)
    for curr_dict in dicts:
        for k, v in curr_dict.items():
            result[v].append(k)
    return [tuple(v) for v in result.values() if len(v) > 1]


print(d_1)  # {0: 'Apple', 1: 'Peach'}
print(d_2)  # {0: 'Apple', 1: 'Banana', 2: 'Pear', 3: 'Peach'}
print(dicts_to_tuples(d_1, d_2))  # [(0, 0), (1, 3)]

剩下的就靠你了。

您甚至可以將數組轉換為數據框並執行合並:

df2 = pd.DataFrame(b)
merge_ = pd.merge(df,df2,left_on=['col1',df.index],right_on=['col1',df2.index],how='inner')

這個解決方案有效嗎? 是否需要知道對應的key,如果不需要,這只是索引列表:

mask = np.in1d(b,df['col1'])
idx = np.arange(len(mask)) 
idx[mask]

# array([0, 3])

您也可以這樣做以獲取位置的字典:

df['idx'] = idx[mask]                                                                                                                                                                              

df.set_index('idx')['col1'].to_dict()                                                                                                                                                              
# {0: 'Apple', 3: 'Peach'}

df.set_index('col1')['idx'].to_dict()                                                                                                                                                              
# {'Apple': 0, 'Peach': 3}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM