假设我有一个列a, b, c, d, e的数据帧和一个字典{"A": "a", "B": "b", "E": "e"}
a)如何使用此词典返回只有这3列(重命名为大写字母)的新数据帧(相同索引)?
b)或者,是否有方法将字典中未列出的原始数据帧中的任何列删除,并将原始数据帧基本上减少到所选范围?(使用重命名列?)
进一步说,我有dictionary{"A": "a", "Diff": "b - c", "Sum": "d + e"}引用数据帧中的列,但也包括运算符(,+)。
c)是否有方法返回一个新的数据帧(同一索引),其中有3个新列,其中的数据来自操作员描述的“聚合”的原始数据帧?
谢谢你的帮助

最佳答案

您可以使用eval--不是同名的Python函数,而是DataFrame method

In [50]: df = pd.DataFrame(np.arange(15).reshape((3,5)), columns=list("abcde"))

In [51]: df
Out[51]:
    a   b   c   d   e
0   0   1   2   3   4
1   5   6   7   8   9
2  10  11  12  13  14

In [52]: d = {"A": "a", "B": "b", "C": "c"}

In [53]: d2 = {"A": "a", "Diff": "b - c", "Sum": "d + e"}

在单个序列上使用DataFrame构造函数而不是pd.concat
In [87]: pd.DataFrame({k: df.eval(v) for k,v in d.items()})
Out[87]:
    A   B   C
0   0   1   2
1   5   6   7
2  10  11  12

In [88]: pd.DataFrame({k: df.eval(v) for k,v in d2.items()})
Out[88]:
    A  Diff  Sum
0   0    -1    7
1   5    -1   17
2  10    -1   27

09-26 21:09
查看更多