我正在尝试更新多索引数据框中的前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
使用apply将其传递给对象。
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句