从列中选择唯一值并查找其他数据帧中的相应关联数据

时间:2018-03-18 14:47:20

标签: python pandas dataframe

如果他们正在寻找此类问题的解决方案,那么适合任何人。我会尝试在这里解释问题并在此之后给出答案。

问题

我有two csv个文件(file1.csvfile2.csv):cookieid列在两者中都很常见。当我在数据框中加载它时,它看起来像这样:ex:

file1.csv


col1  col2  col3 CookieID
a0   b1     c1   12
a1   b2     c2   13
a2   b3     c3   12
a1   b1     c1   145
a3   b4     c2   555

file2.csv

col4  col9  col55 CookieID colsales
Aba   xxx   yyy   12       567
bab   bhh   jjj   13        0
ccc   kkk   lll   222       67
Aba   xxx   yyy   1         6
ccc   kkk   jjj   666       90

任务:需要为每个CookieID制作单独的文件及其中的所有信息。例如:

我从file1.csvfile2.csv开始阅读。我选择了第一个cookieid 12并创建了一个文件12.csv(或任何其他合适的名称),在其中我放了a0 b1 c1 a2 b3 c3 Aba xxx yyy 567。 ,即两个文件中都存在cookieid的行的值。

解决方案 - 为社区提供以下内容。如果您想从数据集中找出cookie旅程,可以实施它。

2 个答案:

答案 0 :(得分:1)

我认为您还可以使用set s的解决方案,在DataFrame列的CookieID列中仅写入常见行:

DATA_FILE1 = 'file1.csv'
df1 = pd.read_csv(DATA_FILE1,sep=',',encoding='ISO-8859-1',index_col=['CookieID'])
DATA_FILE2 = 'file2.csv'
df2 = pd.read_csv(DATA_FILE2,sep=',',encoding='ISO-8859-1', index_col=['CookieID'])

cookieset = set(df1.index).intersection(df2.index)
print (cookieset)
{12, 13}

for i in cookieset:
    dfout1 = df1.loc[[i]].values.ravel()
    dfout2 = df2.loc[[i]].values.ravel()
    bigdata = np.concatenate([dfout1, dfout2])
    print (bigdata)
    k = pd.DataFrame([bigdata])
    k.to_csv(str(i)+".txt",header=None, index=None, sep=' ')

答案 1 :(得分:0)

import pandas as pd
import numpy as np
import string


DATA_FILE1 = 'file1.csv'
## encodings vary from file to file
df1 = pd.read_csv(DATA_FILE1,sep=',',encoding='ISO-8859-1')
DATA_FILE2 = 'file2.csv'
df2 = pd.read_csv(DATA_FILE2,sep=',',encoding='ISO-8859-1')

#creating a list of unique cookieids from both the files
cookielist =[]

uniqcookie1 = df1["CookieID"].unique()
uniqcookie2 = df2["CookieID"].unique()

for i in uniqcookie1:
    cookielist.append(i)
for j in uniqcookie2:
    cookielist.append(j)

for i in cookielist:
    dfout1 = df1.loc[df1['CookieID'] == i]
    dfout2 = df2.loc[df2['CookieID'] == i]
    bigdata = pd.concat([dfout1, dfout2], axis=1)
    k = bigdata.loc[:, bigdata.columns != 'CookieID']
    k.to_csv(str(i)+".txt",header=None, index=None, sep=' ', mode='a')