首页 > 解决方案 > 使用将读取的值应用回原始数据帧?

问题描述

我提前申请,因为这个问题部分是技术性的,部分是理解更好的 pandas/python 设计。

这就是我想要做的。给出这个数据:

a,b
1,2
1,3
2,4
2,5

我想创建第三列['c'],其中包含基于每列和A分组的一些数据。我这样做的方式是:

for item in df.a.unique(): 
   dataSetToProcess = df.loc[df['a'] == item][['a', 'b']]
   dataSetToProcess['c'] = dataSetToProcess.apply(MyFunction)

使用这种方法,我对 C 有一个价值,但它只在 dataSetToProcess 上,它不是主 DF 的一部分。我想在主 DF 中提供 C 的值。

我的预期结果(为简单起见,假设每组 A 列只是平均该组本身并将其添加到 C 列):

a,b,c
1,2, 2.5
1,3, 2.5
2,4, 4.5
2,5, 4.5

我的两个想法是获取每个结果并将 A、B 列映射到原始 DF,但想知道是否有更简单/更清洁的方法?

标签: pythonpandas

解决方案


假设您有两个数据框,df1并且dataSetToProcess

df1 = pd.DataFrame({"a": [1, 1, 2, 2], "b": [2, 3, 4, 5]})
dataSetToProcess = pd.DataFrame({"a": [1, 2], "c": [2.5, 4.5]})

print(df1)
print(dataSetToProcess)

   a  b
0  1  2
1  1  3
2  2  4
3  2  5
   a    c
0  1  2.5
1  2  4.5

然后:

df1 = df1.merge(dataSetToProcess, on="a")
print(df1)

印刷:

   a  b    c
0  1  2  2.5
1  1  3  2.5
2  2  4  4.5
3  2  5  4.5

从那里,您可以根据 和 列计算a变量。bc


推荐阅读