python - 根据两个 pandas DataFrame 之间的条件为新列分配值

标签 python pandas numpy dataframe

假设有两个数据框: df1 包含 4 列。 “名称”列包含城市名称(A、B、C)。其他每一列代表一年 (y0, y1, y2),其中包含居住在该城市的人数。

np.random.seed(seed=34)
name = ['A','B','C']
y0 = np.random.random_integers(1,high=40, size=3)
y1 = np.random.random_integers(1,high=40, size=3)
y2 = np.random.random_integers(1,high=40, size=3)
df = pd.DataFrame(data={'NAME' : name, 'y0' : y0, 'y1' : y1, 'y2' : y2})
df

   NAME y0  y1  y2
0   A   34  36  15
1   B   22  6   30
2   C   5   12  19

df2 包含 3 列。 “名称”列包含城市的名称。 “y”列包含年份值(y0、y1、y2),“i”列包含可以访问互联网的人数。

y = ['y0', 'y1', 'y2',  'y0', 'y1', 'y2',  'y0', 'y1', 'y2']
name2 = ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C']
i = [15, 6, 12, 18, 4, 20, 3, 8, 2]
df2 = pd.DataFrame(data={'NAME':name2, 'y':y, 'i':i})
df2

   NAME y   i
0   A   y0  15
1   A   y1  6
2   A   y2  23
3   B   y0  18
4   B   y1  17
5   B   y2  20
6   C   y0  3
7   C   y1  24
8   C   y2  2

我需要在 df2 上创建一个列,其中包含 df1 的值,条件是 df2['NAME'] 的值等于 df1['NAME'] 并且 df2['y'] 等于到 df1 列,以获得以下结果:


   NAME y   i   v
0   A   y0  15  34
1   A   y1  6   36
2   A   y2  12  15
3   B   y0  18  22
4   B   y1  4   6
5   B   y2  20  30
6   C   y0  3   5
7   C   y1  8   12
8   C   y2  2   19

城市名称出现在 df 上的次数不是恒定的。 提前谢谢你。

最佳答案

您可以这样做,因为值匹配:

df2['v'] = df.melt(col_level=0, id_vars='NAME').sort_values(by='NAME').reset_index(drop=True)['value'] 

输出:

  NAME   y   i   v
0    A  y0  15  34
1    A  y1   6  36
2    A  y2  12  15
3    B  y0  18  22
4    B  y1   4   6
5    B  y2  20  30
6    C  y0   3   5
7    C  y1   8  12
8    C  y2   2  19

或与 combinefirst

df3 = df.melt(col_level=0, id_vars='NAME').sort_values(by='NAME').reset_index(drop=True)  
df3 = df3.rename(columns={'variable':'y'})                                                                                         
df3 = df2.combine_first(df3)
df3['value'] = df3['value'].astype(int)


  NAME   i  value   y
0    A  15     34  y0
1    A   6     36  y1
2    A  12     15  y2
3    B  18     22  y0
4    B   4      6  y1
5    B  20     30  y2
6    C   3      5  y0
7    C   8     12  y1
8    C   2     19  y2

关于python - 根据两个 pandas DataFrame 之间的条件为新列分配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59363563/

相关文章:

python - 基于时间窗口在用户项矩阵列表上创建累积函数

python - 如何从没有python中特定列的数组中读取

algorithm - 如何在绝对灰度图像中而不是在二进制图像中检测直线?

python - 与引用列表比较以转换为二进制编码

python - Pydev代码完成一切

python - scp 与带有私钥的子进程 python

python - 如何加载用户代码?

python - 想要将Salesforce报表内容导入、提取到pandas中,然后保存

python - 在 Pandas 中,如何制作数据透视表来计数和跳过重复?

python - 运行时错误 : The current Numpy installation fails to pass a sanity check due to a bug in the windows runtime