在这里学习Python,对此有任何帮助,我们非常感谢。我有一个由两部分组成的问题,尽管我已经为第一部分创建了一个解决方案,但必须有更多的pythonic方法来实现这个目标。第二部分,不太确定如何进行。
我在两个独立的数据框中有唯一ID列。我想计算在df_1的uid列中did_2 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 }
答案 0 :(得分:3)
您可以使用合并
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']