python - 将同名熊猫数据框列的值聚合到单列
问题描述
我有多个通过标记代码生成的 csv 文件。这些文件包含大写和小写的关键字。我想将所有这些文件合并到一个数据框中,其中包含所有小写的唯一值(总和)。你会建议什么来得到下面的结果?
初始 DF:
+---+---+----+-----+
| a | b | A | B |
+---+---+----+-----+
| 1 | 2 | 3 | 1 |
| 2 | 1 | 3 | 1 |
+---+---+----+-----+
结果
+---+---+
| a | b |
+---+---+
| 4 | 3 |
| 5 | 2 |
+---+---+
我无权访问创建 csv 文件的原始数据,因此我无法在前面的步骤中更正此问题。目前我已经尝试将 .lower() 映射到我创建的数据帧标题,但它返回具有相同名称的单独列,如下所示:
使用 pandas 不是必需的。我曾想过将 csv 文件转换为字典,然后尝试上述过程(结果比我想象的要复杂得多),或者使用列表。此外, group by 不会完成这项工作,因为它会删除不重复的列名。欢迎任何方法。
解决方案
以下解决方案应该这样做:
import pandas as pd
import numpy as np
np.random.seed(seed=1902)
test_df = pd.DataFrame({
# some ways to create random data
'a': np.random.randint(9, size=5),
'b': np.random.randint(9, size=5),
'A': np.random.randint(9, size=5),
'B': np.random.randint(9, size=5),
'c': np.random.randint(9, size=5),
})
sum_df = test_df.copy()
columns_to_keep = set([name.lower() for name in list(test_df)])
for column_name in columns_to_keep:
mutual_columns = [column_name, column_name.upper()]
mutual_columns = [value for value in mutual_columns if value in list(test_df)]
sum_df[column_name] = test_df[mutual_columns].sum(axis=1)
sum_df = sum_df[list(columns_to_keep)]
print("original is:\n", test_df)
print("sum is:\n", sum_df)
生产
original is:
a b A B c
0 2 5 7 2 4
1 1 6 2 3 1
2 0 4 2 4 3
3 6 5 5 7 4
4 1 0 2 7 5
sum is:
a b c
0 9 7 4
1 3 9 1
2 2 8 3
3 11 12 4
4 7 5 3
基本上制作一个相互列的列表来求和(分别由列的名称及其相应的上限或下限给出),并沿着与这些行相对应的行求和。
推荐阅读
- android - phonegap 应用程序未在方向更改时更新样式
- r - R - 仅当每个组满足某些条件时才选择 ID
- ios - 如何声明继承的内置协议以便可以从另一个框架或应用程序导入?
- android - 滚动片段位于 Activity 顶部,导致 Activity 视图下方滚动
- sql - SSIS表达式将变量作为列然后抛出错误
- django - 通过 Nginx 代理 HTTPS 向 docker-compose 中的 gunicorn django 提供静态文件
- bounding-box - 如何使用 fastai 为自定义训练图像分类器绘制预测类的边界框
- python - doctest 失败,而输出似乎正确
- admob - 如何将 Google Admob 的欧盟同意政策模板翻译成不同的语言?
- json - 如何解析 JSON 文件中的值并返回 MessageBox 中的值?