我正在尝试更新多索引数据框中的前 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
然后,使用 apply 将其传递给 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
关于python - 如何在多索引 Pandas Dataframe 中按组更新前 N 行的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24804832/