现在我正在使用python pandas,无法找到解决此问题的方法: 我有一个数据帧df,我想根据同一数据集的另一个colomn中的标记将某些数据从一行复制到另一行(替换)。一个例子是我认为最好的展示方式:
Kind Type V1 V2 V3
AAA AAA 7 8 4
BBB AAA 4 8 1
CCC AAA 3 1 7
AAA BBB 2 5 3
BBB BBB 11 9 8
CCC BBB 7 7 10
AAA CCC 5 8 2
BBB CCC 2 3 7
CCC CCC 4 10 6
我想要的是用每种类型的BBB替换种类AAA,但仅用于行Value3(V3)。结果将是:
Kind Type V1 V2 V3
AAA AAA 7 8 1
BBB AAA 4 8 1
CCC AAA 3 1 7
AAA BBB 2 5 8
BBB BBB 11 9 8
CCC BBB 7 7 10
AAA CCC 5 8 7
BBB CCC 2 3 7
CCC CCC 4 10 6
正如您所看到的,现在已经替换了这3个数字,其值来自BBB类型。
用
df.loc[df['Kind']=='AAA','V3'] = x # x is numeric
我只能用数字x的种类AAA替换每个V3号码,但这不是我想要的。因为数字都不同。有人可以帮我吗?谢谢!
答案 0 :(得分:2)
按boolean indexing
过滤DataFrame
,仅为map
Series
Kind
AAA
行创建s = df.loc[df['Kind'] == 'BBB', ['Type', 'V3']].set_index('Type')['V3']
print (s)
Type
AAA 1
BBB 8
CCC 7
Name: V3, dtype: int64
df.loc[df['Kind']=='AAA','V3'] = df['Type'].map(s)
print (df)
Kind Type V1 V2 V3
0 AAA AAA 7 8 1
1 BBB AAA 4 8 1
2 CCC AAA 3 1 7
3 AAA BBB 2 5 8
4 BBB BBB 11 9 8
5 CCC BBB 7 7 10
6 AAA CCC 5 8 7
7 BBB CCC 2 3 7
8 CCC CCC 4 10 6
:
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="css/style.css"/>
答案 1 :(得分:0)
以下是使用shift
df.loc[df['Kind'] == 'AAA', 'V3'] = df['V3'].shift(-1).fillna(0).astype(int)
Kind Type V1 V2 V3
0 AAA AAA 7 8 1
1 BBB AAA 4 8 1
2 CCC AAA 3 1 7
3 AAA BBB 2 5 8
4 BBB BBB 11 9 8
5 CCC BBB 7 7 10
6 AAA CCC 5 8 7
7 BBB CCC 2 3 7
8 CCC CCC 4 10 6
请注意,这依赖于您的数据框按类型和类型排序,并且不匹配的默认值为0。