【发布时间】:2020-10-27 05:28:00
【问题描述】:
我有 2 个数据框 df1 和 df2。 df2 数据帧是我提取的 df1 的子集以进行一些清理。两个数据帧都可以在索引上匹配。我在网站上看到了很多合并。我不想向 df1 添加更多列,并且数据框的大小不同 df1 有 1000 行,而 df2 有 275 行,所以我不想替换整个列。我想用这些数据帧的索引匹配的 df2['AgeBin'] 值更新 df1['AgeBin']。
indexes = df.loc[df.AgeBin.isin(dfage_test.AgeBin.values)].index
df1.at[indexes,'AgeBin'] = df2['AgeBin'].values
这是我想出的,但似乎有一个问题,因为 df 的大小不同
ValueError: Must have equal len keys and value when setting with an iterable
以下是过度简化。 df1 有 26 列,df2 有 12 列,Agebin 是两个 dfs 中的最后一列。这在理论上是我的目标
df2
AgeBin
0 2
1 3
2 1
3 3
df1
AgeBin
0 NaN
1 NaN
2 NaN
3 NaN
df1 after update
AgeBin
0 2
1 3
2 1
3 3
这里是数据框规范
RangeIndex: 1309 entries, 0 to 1308
Data columns (total 26 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PassengerId 1046 non-null float64
1 Survived 714 non-null category
2 Pclass 1046 non-null category
3 Name 1046 non-null object
4 Sex 1046 non-null object
5 Age 1046 non-null float64
6 SibSp 1046 non-null float64
7 Parch 1046 non-null float64
8 Ticket 1046 non-null object
9 Fare 1046 non-null float64
10 Embarked 1046 non-null category
11 FamilySize 1046 non-null float64
12 Surname 1046 non-null object
13 Title 1046 non-null object
14 IsChild 1046 non-null float64
15 isMale 1046 non-null category
16 GroupID 1046 non-null float64
17 GroupSize 1046 non-null float64
18 GroupType 1046 non-null object
19 GroupNumSurvived 1046 non-null float64
20 GroupNumPerished 1046 non-null float64
21 LargeGroup 1046 non-null float64
22 SplitFare 1046 non-null float64
23 log10Fare 1046 non-null float64
24 log10SplitFare 1046 non-null float64
25 AgeBin 1046 non-null category
dtypes: category(5), float64(15), object(6)
memory usage: 221.9+ KB
dfageResults.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 263 entries, 5 to 1308
Data columns (total 1 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 AgeBin 263 non-null category
dtypes: category(1)
memory usage: 12.4 KB
这里是分类
67] dfageResults.groupby(["AgeBin"])["AgeBin"].count()
AgeBin
0-14 25
15-29 192
30-44 46
Name: AgeBin, dtype: int64
[68] df.groupby(["AgeBin"])["AgeBin"].count()
AgeBin
0-14 107
15-29 462
30-44 301
45-59 136
60+ 40
Name: AgeBin, dtype: int64
【问题讨论】:
-
能否提供两个数据框的示例数据?
-
你需要的是
df1.combine_first(df2) -
我尝试了您的解决方案,但没有成功。感谢您的帮助!