所以我又问了一个关于Python和熊猫的问题。 我在表1中列出了以下几列:
ID;COUNT;FOREIGN_ID;OTHER_DATA
1;3;xyz1
2;1;xyz2
3;1;xyz3
表2
ID;FOREIGN_ID;OTHER_DATA
1;xyz1;000001
2;xyz1;000002
3;xyz1;000003
4;xyz1;000004
5;xyz1;000005
6;xyz2;000000
7;xyz2;000000
8;xyz3;000000
9;xyz3;000000
两个表都存储为CSV文件。我将它们加载到dataframe中,然后遍历TABLE1。我必须找到表2中所有记录相同的记录,并随机选择其中一些。你知道吗
df_result = pd.DataFrame()
df_table1 = pd.read_csv(table1, delimiter=';')
df_table2 = pd.read_csv(table2, delimiter=';')
for index, row in df_table1 .iterrows():
df_candidates = df_table2[(df_table2['FOREIGN_ID'] == row['FOREIGN_ID']
random_numbers = np.random.choice(len(df_kandidati), row['count'], replace=False)
df_result.append(df_candidates.iloc[random_numbers])
在我前面的问题中,我得到了一个答案,使用For循环是一个很大的时间浪费。。。但是对于这个问题,我找不到一个不需要使用for循环的解决方案。你知道吗
编辑: 很抱歉这么晚才修改我的问题。。忙着其他事情。。。 以下是结果表。请注意,我的真实表格与下面的表格略有不同。我在实际使用中连接了3个外键上的表,但为了演示,我使用了带有假数据的表。你知道吗
所以逻辑应该是这样的: 阅读表1的第一行。你知道吗
1;3;xyz1
在表2中查找具有相同外部\u ID的所有记录 计数=3,外部\u id=xyz1 具有外部\u id=xyz1的行是:
1;xyz1;000001
2;xyz1;000002
3;xyz1;000003
4;xyz1;000004
5;xyz1;000005
因为count=3,我必须随机选择其中的3个记录。 我使用以下行来执行此操作: df\ U候选人是所有合适记录的表格(上表)
random_numbers = np.random.choice(len(df_candidates), row['count'], replace=False)
然后我将随机选择的记录存储在df\u结果中,在解析表1中的所有行之后,我将df\u结果写入csv。你知道吗
问题是我的表有50万到100万行,所以遍历表1中的每一行非常慢。。。我相信有更好的方法。。但我已经被困在这两天了所以。。你知道吗
你考虑过使用 pd.merge()
你的电话看起来像:
要选择只包含表1中的值的行,可以使用pd.merge:
或df.isin():
然后选择每组随机样本:
相关问题 更多 >
编程相关推荐