python数据帧处理

2024-05-16 10:16:19 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我又问了一个关于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中的每一行非常慢。。。我相信有更好的方法。。但我已经被困在这两天了所以。。你知道吗


Tags: csviddf记录randomrowpdcandidates
2条回答

你考虑过使用 pd.merge()

你的电话看起来像:

results=pd.merge(table1, table2, how='inner', on='FOREIGN_ID')

要选择只包含表1中的值的行,可以使用pd.merge

col = "FOREIGN_ID"

left = df_table2
right = df_table1[[col]]
filtered = pd.merge(left=left, right=right, on=col, how="inner")

df.isin()

ix = df_table2[col].isin(df_table1[col])
filtered = df_table2[ix]

然后选择每组随机样本:

def select_random_row(grp):
    choice = np.random.randint(len(grp))
    return grp.iloc[choice]

filtered.groupby(col).apply(select_random_row)

相关问题 更多 >