pandas - 通过对 Pandas 中的某些列求和来组合多个数据框

标签 pandas dataframe sum

给定三个数据框:

df1 = pd.DataFrame({'A': [5, 0], 'B': [2, 4], 'C': 'dog'})
df2 = pd.DataFrame({'A': [1, 1], 'B': [3, 3], 'C': 'dog'})
df3 = pd.DataFrame({'A': [2, 1], 'B': [5, 1], 'C': 'dog'})

如何通过将给定数据帧的子集的值相加,将它们组合成一个数据帧,这样结果就变成了:

pd.DataFrame({'A': [8, 2], 'B': [10, 8], 'C': 'dog'})

对于这个例子?我的问题是我也有相同但不能相加的列(如此处的 'C')。

最佳答案

一个可能的解决方案是 sum if 数值和 if strings then join unique values per groups in GroupBy.aggconcat 之后DataFrame列表:

f = lambda x: x.sum() if np.issubdtype(x.dtype, np.number) else ','.join(x.unique())
df = pd.concat([df1, df2, df3], keys=range(3)).groupby(level=1).agg(f)
print (df)
   A   B    C
0  8  10  dog
1  2   8  dog

如果可能,使用不同的值,例如 catdog:

df1 = pd.DataFrame({'A': [5, 0], 'B': [2, 4], 'C': 'dog'})
df2 = pd.DataFrame({'A': [1, 1], 'B': [3, 3], 'C': 'dog'})
df3 = pd.DataFrame({'A': [2, 1], 'B': [5, 1], 'C': ['cat','dog']})


f = lambda x: x.sum() if np.issubdtype(x.dtype, np.number) else ','.join(x.unique())
df = pd.concat([df1, df2, df3], keys=range(3)).groupby(level=1).agg(f)
print (df)
   A   B        C
0  8  10  dog,cat
1  2   8      dog

如果需要列表:

f = lambda x: x.sum() if np.issubdtype(x.dtype, np.number) else x.unique().tolist()
df = pd.concat([df1, df2, df3], keys=range(3)).groupby(level=1).agg(f)
print (df)
   A   B           C
0  8  10  [dog, cat]
1  2   8       [dog]

对于非数值标量的组合列表,使用自定义函数:

def f(x):
    if np.issubdtype(x.dtype, np.number):
        return x.sum()
    else:
        u = x.unique().tolist()
        if len(u) == 1:
            return u[0]
        else:
            return u

df = pd.concat([df1, df2, df3], keys=range(3)).groupby(level=1).agg(f)
print (df)
   A   B           C
0  8  10  [dog, cat]
1  2   8         dog

关于pandas - 通过对 Pandas 中的某些列求和来组合多个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57075925/

相关文章:

python - 读取多个 .csv 文件并提取(在新的 .csv 文件中)与特定列中的非空单元格对应的所有行

python - 将数据框中每一行的前 N ​​个值保留在列索引组中

MySQL SUM 来自具有不同 GROUP BY 的多个列

python-3.x - 如何通过group模式在pandas中填写na

python - Pandas 为一列附加多列

python - Pandas/Python 相当于 Stata 的 "levelsof"

python-3.x - 比较不同形状的 Pandas 数据框

python:如何拆分列并将最大元素添加到新列?

bash - 使用 awk 将整数求和到 bash 中的列

sql - 使用sqlite查询从amout值中删除dot(.)