繁体   English   中英

python pandas:检查数据帧的列值是否在另一个数据帧的列中,然后计数并列出它

[英]python pandas: Check if dataframe's column value is in another dataframe's column, then count and list it

在这里学习Python,对此有任何帮助非常感谢。 我有一个由两部分组成的问题,尽管我已经为第一部分创建了一个解决方案,但必须有更多的pythonic方法来实现这个目标。 第二部分,不太确定如何进行。

我在两个独立的数据帧中有唯一ID列。 我想计算df_2的uid列中uid列中uid出现的次数,然后将该uid添加到列表中(如果两者都是)。 以下代码示例适用于我,但我担心某处存在问题,并且必须有更好的方法。

data = {'uid':['uid1', 'uid2', 'uid3', 'uid4'], 'value': [1, 2, 3, 4]}
df = pd.DataFrame(data)

data1 = {'uid':['uid4', 'uid2', 'uid5'], 'value1': ["", 5, 6]}
df1 = pd.DataFrame(data1)

count_val_in_both_df = 0
list_val_in_both_df = []
for x in range(len(df1.iloc[:, 0])) :
    if df1.iloc[x, 0] in df.iloc[:, 0].values :
        count_val_in_both_df += 1
        list_val_in_both_df.append(df1.iloc[x, 0])        
print('count = ' + str(count_val_in_both_df))
print(list_val_in_both_df)

哪个输出:

df
    uid  value
0  uid1      1
1  uid2      2
2  uid3      3
3  uid4      4


df1
    uid value1
0  uid4       
1  uid2      5
2  uid5      6


count = 2
['uid4', 'uid2']

第二部分是在df中为df1中的值创建一个列,并添加df1中的值。 我很遗憾这部分,但想要这样的结果:

{    uid  value value1
0  uid1      1       
1  uid2      2      5
2  uid3      3       
3  uid4      4       }

您可以使用合并

df.merge(df1, on = 'uid', how = 'left').fillna('')

    uid value   value1
0   uid1    1   
1   uid2    2   5
2   uid3    3   
3   uid4    4   

对于问题的第一部分,您可以使用交集

list_val_in_both_df  = list(set(df.uid).intersection(set(df1.uid)))

你得到

['uid2', 'uid4']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM