我正在尝试更新多索引数据框中的前 N 行,但在寻找解决方案时遇到了一些麻烦,所以我想为它创建一个帖子。
示例代码如下:
# Imports
import numpy as np
import pandas as pd
# Set Up Data Frame
dates = pd.date_range('1/1/2000', periods=8)
df = pd.DataFrame(np.random.randn(8, 4), columns=['A', 'B', 'C', 'D'])
df['DATE'] = dates
df['CATEGORY'] = ['A','B','A','B','A','B','A','B']
# Set Index
df.set_index(['CATEGORY','DATE'],inplace=True)
df.sort(inplace=True)
# Get First Two Rows of Each Category
df.groupby(level=0).apply(lambda x: x.iloc[0:2])
# Set The Value of Column 'C' Equal to Zero
# ???
因此,我能够使用“iloc”选择行,但之后我不确定如何将“C”列设置为零。感觉也许我的处理方式是错误的。任何帮助将不胜感激。谢谢!
怎么样?首先定义一个函数,它接受一个数据帧,并用指定的值替换前 x 条记录。
def replace_first_x(group_df, x, value):
group_df.iloc[:x, :] = value
return group_df
然后,将其传递到groupby
对象与应用。
In [97]: df.groupby(level=0).apply(lambda df: replace_first_x(df, 2, 9999))
Out[97]:
A B C D
CATEGORY DATE
A 2000-01-01 9999.000000 9999.000000 9999.000000 9999.000000
2000-01-03 9999.000000 9999.000000 9999.000000 9999.000000
2000-01-05 1.590503 0.948911 -0.268071 0.622280
2000-01-07 -0.493866 1.222231 0.125037 0.071064
B 2000-01-02 9999.000000 9999.000000 9999.000000 9999.000000
2000-01-04 9999.000000 9999.000000 9999.000000 9999.000000
2000-01-06 1.663430 -1.170716 2.044815 -2.081035
2000-01-08 1.593104 0.108531 -1.381218 -0.517312
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)