- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个像这样的数据框:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({
'key1': list('ABAACCA'),
'key2': list('1675987'),
'prop1': list('xyzuynb'),
'prop2': list('mnbbbas')
}).set_index(['key1', 'key2'])
df2 = pd.DataFrame({
'key1': list('ABCCADD'),
'key2': list('1598787'),
'prop1': [np.nan] * 7,
'prop2': [np.nan] * 7
}).set_index(['key1', 'key2'])
prop1 prop2
key1 key2
A 1 x m
B 6 y n
A 7 z b
5 u b
C 9 y b
8 n a
A 7 b s
prop1 prop2
key1 key2
A 1 NaN NaN
B 5 NaN NaN
C 9 NaN NaN
8 NaN NaN
A 7 NaN NaN
D 8 NaN NaN
7 NaN NaN
并且现在想使用
df1
来填充
df2
df2.fillna(df1)
但是,我得到
site-packages/pandas/core/generic.py in _where(self, cond, other,inplace, axis, level, errors, try_cast) 8694
other._get_axis(i).equals(ax) for i, ax in enumerate(self.axes)
8695 ):-> 8696 raise InvalidIndexError 8697 8698 # slice me out of the otherInvalidIndexError:
filler1 = pd.DataFrame({
'key': list('AAABCCDD'),
'prop1': list('xyzuyasj'),
'prop2': list('mnbbbqwo')
})
tobefilled1 = pd.DataFrame({
'key': list('AAABBCACDF'),
'keep_me': ['stuff'] * 10,
'prop1': [np.nan] * 10,
'prop2': [np.nan] * 10,
})
filler1['g'] = filler1.groupby('key').cumcount()
tobefilled1['g'] = tobefilled1.groupby('key').cumcount()
filler1 = filler1.set_index(['key', 'g'])
tobefilled1 = tobefilled1.set_index(['key', 'g'])
print(tobefilled1.fillna(filler1))
prints
key g
A 0 stuff x m
1 stuff y n
2 stuff z b
B 0 stuff u b
1 stuff NaN NaN
C 0 stuff y b
A 3 stuff NaN NaN
C 1 stuff a q
D 0 stuff s w
F 0 stuff NaN NaN
最佳答案
这里的问题是在df1中定义的重复索引:
df1 = pd.DataFrame({
'key1': list('ABAACCA'),
'key2': list('1675987'),
'prop1': list('xyzuynb'),
'prop2': list('mnbbbas')
}).set_index(['key1', 'key2'])
注意:Key1 = A Key2 = 7出现两次,df1的索引不是唯一的。
df1 = pd.DataFrame({
'key1': list('ABAACCA'),
'key2': list('1675989'),
'prop1': list('xyzuynb'),
'prop2': list('mnbbbas')
}).set_index(['key1', 'key2'])
df2 = pd.DataFrame({
'key1': list('ABCCADD'),
'key2': list('1598787'),
'prop1': [np.nan] * 7,
'prop2': [np.nan] * 7
}).set_index(['key1', 'key2'])
因此,在df1中创建唯一索引,现在尝试df.fillna:
df2.fillna(df1)
输出:
prop1 prop2
key1 key2
A 1 x m
B 5 NaN NaN
C 9 y b
8 n a
A 7 z b
D 8 NaN NaN
7 NaN NaN
当我尝试使用
reindex_like
方法时,首先得到了唯一的索引,从而得到了这一提示:
df1 = pd.DataFrame({
'key1': list('ABAACCA'),
'key2': list('1675989'),
'prop1': list('xyzuynb'),
'prop2': list('mnbbbas')
}).set_index(['key1', 'key2'])
df2 = pd.DataFrame({
'key1': list('ABCCADD'),
'key2': list('1598787'),
'prop1': [np.nan] * 7,
'prop2': [np.nan] * 7
}).set_index(['key1', 'key2'])
print(df1.reindex_like(df2))
输出:
prop1 prop2
key1 key2
A 1 x m
B 5 NaN NaN
C 9 y b
8 n a
A 7 z b
D 8 NaN NaN
7 NaN NaN
现在,让我们恢复到帖子中的原始数据帧:
df1 = pd.DataFrame({
'key1': list('ABAACCA'),
'key2': list('1675987'),
'prop1': list('xyzuynb'),
'prop2': list('mnbbbas')
}).set_index(['key1', 'key2'])
df2 = pd.DataFrame({
'key1': list('ABCCADD'),
'key2': list('1598787'),
'prop1': [np.nan] * 7,
'prop2': [np.nan] * 7
}).set_index(['key1', 'key2'])
print(df1.reindex_like(df2))
输出ValueError:
ValueError: cannot handle a non-unique multi-index!
另一个解决方法是,通过添加另一个带有累加计数的索引级别来创建唯一索引。
df1 = pd.DataFrame({
'key1': list('ABAACCA'),
'key2': list('1675987'),
'prop1': list('xyzuynb'),
'prop2': list('mnbbbas')
}).set_index(['key1', 'key2'])
df2 = pd.DataFrame({
'key1': list('ABCCADD'),
'key2': list('1598787'),
'prop1': [np.nan] * 7,
'prop2': [np.nan] * 7
}).set_index(['key1', 'key2'])
df1 = df1.set_index(df1.groupby(df1.index).cumcount(), append=True)
df2 = df2.set_index(df2.groupby(df2.index).cumcount(), append=True)
df2.fillna(df1)
输出:
prop1 prop2
key1 key2
A 1 0 x m
B 5 0 NaN NaN
C 9 0 y b
8 0 n a
A 7 0 z b
D 8 0 NaN NaN
7 0 NaN NaN
然后,您可以删除索引级别2:
df2.fillna(df1).reset_index(level=2, drop=True)
输出:
prop1 prop2
key1 key2
A 1 x m
B 5 NaN NaN
C 9 y b
8 n a
A 7 z b
D 8 NaN NaN
7 NaN NaN
但是,我认为 Pandas 应该为
fillna
非唯一MultiIndexes提供更好的错误消息传递,就像对
reindex_like
一样。
关于python - 对两个多索引数据帧使用fillna会引发InvalidIndexError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62789981/
我有一个 Pandas 数据框 City State 0 Cambridge MA 1 NaN DC 2 Boston MA
我有一个 pandas 数据框,我想用 'colname_miss' 字符串填充缺失的类别。 def FillCatMissing(df): cols = ['A','B','C']
对于初学者,这里有一些符合我的问题的人工数据: df = pd.DataFrame(np.random.randint(0, 100, size=(vsize, 10)), col
fillna可以接受一个函数吗?或者只是“backfill”、“bfill”等方法? http://pandas.pydata.org/pandas-docs/stable/generated/pan
我想在多索引数据帧上使用 fillna,并仅在特定列位于同一索引中时填充该列。下一个索引可能以 n/a 开头,因此我无法在该列上调用 fillna 。组的大小正在变化,因此我无法通过数量来限制功能。
我正在尝试替换 pandas 数据框中的 NaT。 orders.PAID_AT 0 NaT 1 NaT 2
我有一个大型数据框,其值如下: Name A B C D E F G # Coulmns Matt 1 n n n 5 n 5 # rows Jake n n 2
我有一个大约 100 万行的大型数据集,大约有 5000 个缺失坐标(我想用类别“城市”的中值填充它们,但 fillna 正在工作,如何实现它? city = ['London', 'Paris',
我正在尝试用 if 条件做一个 fillna Fimport pandas as pd df = pd.DataFrame(data={'a':[1,None,3,None],'b':[4,None,
我有如下数据框 Re_MC,Fi_MC,Fin_id,Res_id, 1,2,3,4 ,7,6,11 11,,31,32 ,,35,38 df1 = pd.read_clipboard(sep
我有一个数据框,其中有一列连续但不相邻的数字和缺失值。 我想使用 fillna 函数用前一个非缺失行的增量值填充缺失值。 这是一个简化的表格: index my_counter 0 1 1
我有以下两个数据框 df1和 df2df1: A B C D 1 Nora NaN Japan 2 Neo NaN India 3
我试图填充所有缺失值,直到数据帧结束,但无法这样做。在下面的示例中,我取了最后三个值的平均值。我的代码只填充到 2017-01-10,而我想填充到 2017-01-14。对于 1/14,我想使用 11
我有一个关于给定主题的报告数据框。每份报告都有一个分数,受试者在某些日期有分数,但在其他日期没有分数。我想创建一个新的数据框,它只包含每个主题的最新分数。下面是一个 MRE。原始数据框如下所示:
我有一个如下所示的数据框 df = pd.DataFrame({'person_id': [101,101,101,101,202,202,202],
我正在处理一个汽车销售数据集,其中包含以下列:'car'、'price'、'body'、'mileage'、'engV'、'engType'、'registration'、'year'、'model'
我想估算 df['box_office_revenue'] 的缺失值中位数由 df['release_date'] == x 指定和df['genre'] == y 。 下面是我的中值查找函数。 de
我有一个带有“元数据”列的 Pandas 数据框,该列应包含字典作为值。但是,某些值丢失并设置为 NaN。我希望这是 {}。有时,整个列都丢失了,将其初始化为 {} 也是有问题的。 用于添加列 tsp
我正在尝试在特定条件适用的情况下用 0 填充某些行。我正在尝试: df.loc[:,(df.Available == True) & (df.Intensity.isnull())].Intensit
带有 NA 的 series_A 由一个 MultiIndex (X, Y) 索引,而要填写的值在 Series_B 中,它由 X 索引。如何有效解决此类问题? 例如,这里是series_A: bar
我是一名优秀的程序员,十分优秀!