我有一个数据框df
df = pd.DataFrame({'A':['-a',1,'a'],
'B':['a',np.nan,'c'],
'ID':[1,2,2],
't':[pd.tslib.Timestamp.now(),pd.tslib.Timestamp.now(),
np.nan]})
添加了新列
df['YearMonth'] = df['t'].map(lambda x: 100*x.year + x.month)
现在,我想编写一个将进行日期比较的函数或宏,创建一个新的数据框,也向数据框添加一个新列。
我这样尝试过,但似乎我做错了:
def test(df,ym):
df_new=df
if(ym <= df['YearMonth']):
df_new+"_"+ym=df_new
return df_new+"_"+ym
df_new+"_"+ym['new_col']=ym
现在,当我调用测试函数时,我希望创建一个名为的df_new_201612
新数据框,并且此新数据框应再增加一列,该列的所有行的new_col
值ym
均为。
test(df,201612)
新数据框的输出为:
df_new_201612
A B ID t YearMonth new_col
-a a 1 2016-12-05 12:37:56.374620 201612 201612
1 NaN 2 2016-12-05 12:37:56.374644 201208 201612
a c 2 nat nan 201612
创建具有动态名称的变量通常是一个坏习惯。
我认为针对您的问题的最佳解决方案是将数据帧存储到字典中,并动态生成用于访问每个数据帧的密钥名称。
import copy
dict_of_df = {}
for ym in [201511, 201612, 201710]:
key_name = 'df_new_'+str(ym)
dict_of_df[key_name] = copy.deepcopy(df)
to_change = df['YearMonth']< ym
dict_of_df[key_name].loc[to_change, 'new_col'] = ym
dict_of_df.keys()
Out[36]: ['df_new_201710', 'df_new_201612', 'df_new_201511']
dict_of_df
Out[37]:
{'df_new_201511': A B ID t YearMonth new_col
0 -a a 1 2016-12-05 07:53:35.943 201612 201612
1 1 NaN 2 2016-12-05 07:53:35.943 201612 201612
2 a c 2 2016-12-05 07:53:35.943 201612 201612,
'df_new_201612': A B ID t YearMonth new_col
0 -a a 1 2016-12-05 07:53:35.943 201612 201612
1 1 NaN 2 2016-12-05 07:53:35.943 201612 201612
2 a c 2 2016-12-05 07:53:35.943 201612 201612,
'df_new_201710': A B ID t YearMonth new_col
0 -a a 1 2016-12-05 07:53:35.943 201612 201710
1 1 NaN 2 2016-12-05 07:53:35.943 201612 201710
2 a c 2 2016-12-05 07:53:35.943 201612 201710}
# Extract a single dataframe
df_2015 = dict_of_df['df_new_201511']
问题内容: 我引用的数据框如下(是列名): 但是我不想被硬编码,我想要一个变量来使其动态。怎么做? TIA 问题答案: 您可以使用方括号对列进行索引: 因此,当您接受输入为a时,您可以执行以下操作: 此外,将列作为属性访问可能导致模棱两可的行为。如具有列命名,并尝试做这可能要列不同的值,或者如果你有一个名为一样像任何有效的方法DF柱或那么这将导致语法错误。 因此,我强烈建议您使用方括号来选择列。
问题内容: 我有一个如下所示的df: 我正在尝试创建一个如下所示的df: 我试过了 但这不是我要寻找的。 任何指导表示赞赏 问题答案: 那不是新的专栏,而是新的DataFrame: 要获得想要的结果,请使用: 要获得“新列”,您可以使用transform: 我建议阅读docs的split- apply-combine部分 。
我有一个运行良好的动态数据帧,但是当没有数据添加到数据帧中时,我会得到一个错误。因此,我需要一个解决方案来创建一个只有列名的空数据帧。 现在我有这样的东西: PS:列名仍然出现在数据帧中是很重要的。 但当我这样使用它时,我得到的结果是: “空数据帧”部分不错!但是我仍然需要显示列,而不是索引。 编辑: 我发现了一件重要的事情:我正在使用Jinja2将此数据帧转换为PDF,因此我调用了一个方法,首先
问题内容: 我正在使用pandas库,我想将两个新列添加到具有n列(n> 0)的数据框中。 这些新列是由于将函数应用于数据框中的某一列而产生的。 要应用的功能如下: 为仅返回值的函数创建新列的一种方法是: 所以,我想要的但尝试失败的(*)是这样的: 实现此目的的最佳方法是什么?我毫无头绪地扫描了文档。 *返回一个熊猫系列,每个项目都由一个元组z,y组成。尝试将其分配给两个数据框列会产生ValueE
我有一个这样的数据帧: 我想知道我们如何使用GROUPBY实现相同的结果? 感谢帮助。 类似的问题: Pandas列值到列?
问题内容: 我有两个,都被索引。我需要将元素添加在一起以形成一个new ,但前提是索引和列相同。如果该项不存在于之一,则应将其视为零。 我试过使用,但这无论索引和列如何。还尝试了一个简单的方法,但是如果两个数据框都没有该元素,则给出a 。 有什么建议? 问题答案: 怎么样