假设我有一个列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