python - 将同名 pandas 数据框列的值聚合到单列

标签 python pandas dataframe tokenize

我有多个由标记化代码生成的 csv 文件。这些文件包含大写和小写的关键字。我想将所有这些文件合并到一个数据框中,其中包含所有小写的唯一值(求和)。您建议怎样才能得到下面的结果?

初始 DF:

+---+---+----+-----+
| a | b |  A |  B  |
+---+---+----+-----+
| 1 | 2 |  3 |   1 |
| 2 | 1 |  3 |   1 |
+---+---+----+-----+

结果

+---+---+
| a | b |
+---+---+
| 4 | 3 |
| 5 | 2 |
+---+---+

我无权访问创建 csv 文件的原始数据,因此无法在之前的步骤中更正此问题。目前,我已尝试将 .lower() 映射到我创建的数据帧标题,但它返回具有相同名称的单独列,如下所示:

 .lower() after merging

使用 pandas 不是必需的。我想过将 csv 文件转换为字典,然后尝试上述过程(事实证明它比我想象的要复杂得多),或者使用列表。此外,group by 并不能完成这项工作,因为它会删除不重复的列名。欢迎任何方法。

最佳答案

代码:

您可以遍历各列,对具有相同小写表示形式的列进行求和:

def sumDupeColumns(df):
    """Return dataframe with columns with the same lowercase spelling summed."""

    # Get list of unique lowercase column headers
    columns = set(map(str.lower, df.columns))
    # Create new (zero-initialised) dataframe for output
    df1 = pd.DataFrame(data=np.zeros((len(df), len(columns))), columns=columns)

    # Sum matching columns
    for col in df.columns:
        df1[col.lower()] += df[col]

    return df1
<小时/>

示例:

import pandas as pd
import numpy as np

np.random.seed(seed=42)

# Generate DataFrame with random int input and 'duplicate' columns to sum
df = pd.DataFrame(columns = ['a','A','b','B','Cc','cC','d','eEe','eeE','Eee'], 
                  data = np.random.randint(9, size=(5,10))

df = sumDupeColumns(df)

>>> print(df)

     d   eee   cc     a     b
0  6.0  14.0  8.0   9.0  11.0
1  7.0  10.0  5.0  14.0   7.0
2  3.0  14.0  8.0   5.0   8.0
3  3.0  17.0  7.0   8.0  12.0
4  0.0  11.0  9.0   5.0   9.0

关于python - 将同名 pandas 数据框列的值聚合到单列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55132744/

相关文章:

python - 如何返回日期中天数的 CUMSUM - Python

python - 如何检索 Pandas 数据框中的列数?

python - 在 Python 3 中将数据帧值转换为范围值

python - 从解释器和命令行使用 timeit 的时间差异

python - 是否可以创建一个 10 行 0 列的 numpy 矩阵?

python - 如何在 Pyglet 中绘制简单的形状?

python - 您使用哪种 IDE(如果有)构建 python GUI 项目?

python - 如何从重复观察中创建新列并在 Pandas DataFrame 中使用 Python 转置相关数据?

python - 当数据点为 float 据类型时,如何将列与最近的数据点合并?

Python pandas从一列字符串的数据选择中过滤掉nan