如果他们正在寻找此类问题的解决方案,那么适合任何人。我会尝试在这里解释问题并在此之后给出答案。
问题
我有two csv
个文件(file1.csv
和file2.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.csv
和file2.csv
开始阅读。我选择了第一个cookieid
12
并创建了一个文件12.csv
(或任何其他合适的名称),在其中我放了a0 b1 c1 a2 b3 c3 Aba xxx yyy 567
。 ,即两个文件中都存在cookieid
的行的值。
解决方案 - 为社区提供以下内容。如果您想从数据集中找出cookie旅程,可以实施它。
答案 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')