我在单独的csv文件中有两个表。
Rad
ID/Key ID RowKey RadKey RadStart RadStop
A16 A1 6 4 1/1/2018 2/1/2018
A16 A1 6 5 3/1/2018 4/1/2018
A17 A1 7 6 4/1/2018 5/1/2018
A17 A1 7 7 5/1/2018 6/1/2018
马尼
ID/Key ID RowKey Order Date Order ID
A16 A1 6 1/1/2015 1234-USF-0075
A16 A1 6 1/1/2015 1234-USF-0076
A16 A1 6 1/1/2015 1234-USF-0077
A17 A1 7 1/1/2015 1234-USF-0075
A17 A1 7 1/1/2015 1234-USF-0077
我需要编写一个新文件,对于每个RadKey
,将整个RadKey
行写入n
次,其中n
是ID/Key
对以Mani
的形式乘以该RadKeys
对的ID/Key
的数量。新生成的文件的每一行应包含Order Date
中的Order ID
和Mani
。
生成的文件
ID RowKey RadKey RadStart RadStop Order Date Order ID
A1 6 4 1/1/2018 2/1/2018 1/1/2015 1234-USF-0075
A1 6 4 1/1/2018 2/1/2018 1/1/2015 1234-USF-0076
A1 6 4 1/1/2018 2/1/2018 1/1/2015 1234-USF-0077
A1 6 5 3/1/2018 4/1/2018 1/1/2015 1234-USF-0075
A1 6 5 3/1/2018 4/1/2018 1/1/2015 1234-USF-0076
A1 6 5 3/1/2018 4/1/2018 1/1/2015 1234-USF-0077
A1 7 6 4/1/2018 5/1/2018 1/1/2015 1234-USF-0075
A1 7 6 4/1/2018 5/1/2018 1/1/2015 1234-USF-0077
A1 7 7 5/1/2018 6/1/2018 1/1/2015 1234-USF-0075
A1 7 7 5/1/2018 6/1/2018 1/1/2015 1234-USF-0077
注释
RadKeys
在所有ID/Key
对中都是唯一的
Order IDs
可以重复相同的ID/Key
对
答案 0 :(得分:1)
让我们在分配给两个文件的统一密钥上使用merge
创建笛卡尔乘积。
from io import StringIO
radfile = StringIO("""ID/Key ID RowKey RadKey RadStart RadStop
A16 A1 6 4 1/1/2018 2/1/2018
A16 A1 6 5 3/1/2018 4/1/2018
A17 A1 7 6 4/1/2018 5/1/2018
A17 A1 7 7 5/1/2018 6/1/2018""")
manifile = StringIO("""ID/Key ID RowKey Order Date Order ID
A16 A1 6 1/1/2015 1234-USF-0075
A16 A1 6 1/1/2015 1234-USF-0076
A16 A1 6 1/1/2015 1234-USF-0077
A17 A1 7 1/1/2015 1234-USF-0075
A17 A1 7 1/1/2015 1234-USF-0077""")
rad_df = pd.read_csv(radfile, sep='\s\s+', engine='python')
mani_df = pd.read_csv(manifile, sep='\s\s+', engine='python')
df_out = rad_df.assign(key=1).merge(mani_df.assign(key=1))
df_out.to_csv("outfile.csv", index=False, sep='\t')
!type outfile.csv
输出:
ID/Key ID RowKey RadKey RadStart RadStop key Order Date Order ID
A16 A1 6 4 1/1/2018 2/1/2018 1 1/1/2015 1234-USF-0075
A16 A1 6 4 1/1/2018 2/1/2018 1 1/1/2015 1234-USF-0076
A16 A1 6 4 1/1/2018 2/1/2018 1 1/1/2015 1234-USF-0077
A16 A1 6 5 3/1/2018 4/1/2018 1 1/1/2015 1234-USF-0075
A16 A1 6 5 3/1/2018 4/1/2018 1 1/1/2015 1234-USF-0076
A16 A1 6 5 3/1/2018 4/1/2018 1 1/1/2015 1234-USF-0077
A17 A1 7 6 4/1/2018 5/1/2018 1 1/1/2015 1234-USF-0075
A17 A1 7 6 4/1/2018 5/1/2018 1 1/1/2015 1234-USF-0077
A17 A1 7 7 5/1/2018 6/1/2018 1 1/1/2015 1234-USF-0075
A17 A1 7 7 5/1/2018 6/1/2018 1 1/1/2015 1234-USF-0077