如何根据其他列中的数据替换python pandas中行与行之间的某些值?

时间:2018-02-21 09:25:18

标签: python pandas dataframe replace

现在我正在使用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号码,但这不是我想要的。因为数字都不同。有人可以帮我吗?谢谢!

2 个答案:

答案 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。