gpt4 book ai didi

python - 如何从 pandas 数据帧的两个不同列添加值

转载 作者:行者123 更新时间:2023-11-30 22:53:22 25 4
gpt4 key购买 nike

如何将数据帧的两个不同列的第一行添加在一起,这样如果 A 列的第一行是 NaN ,替换为 balance 中的值的第一行,否则,添加 A 列的第一行和 balance的第一行。 B 列也是如此。这个想法是使用 balnce第一行转换其他列 A 和 B 的第一行。我尝试使用 df.iloc[0]获取第一行,但我无法设置该值或添加它:

data = {'id': [1, 2, 3, 4, 5, 6],
'A': [None, None, 20, 10, 39, 30],
'B': [13, 98, 23, 45, 64, 10],
'balance': [23, 41, 12, 22, 32, 0]}

df = pd.DataFrame(data)
df = df.set_index('id')
print df

A B balance
id
1 NaN 13 23
2 NaN 98 41
3 20 23 12
4 10 45 22
5 39 64 32
6 30 10 0

for i in df.columns:
if i not in ['balance']:
if df[i].iloc[0] == None:
df[i].iloc[0] = df['balance'].iloc[0]
else:
df[i].iloc[0] = df[i].iloc[0] + df['balance'].iloc[0]

print df[i]


id
1 NaN
2 NaN
3 20
4 10
5 39
6 30
Name: A, dtype: float64


id
1 36
2 98
3 23
4 45
5 64
6 10
Name: B, dtype: int64
#A[0] should be 23, and B[0] should be 13 + 23 = 36

期望的输出:

id  A   B     balance               
1 23 36 23
2 NaN 98 41
3 20 23 12
4 10 45 22
5 39 64 32
6 30 10 0

最佳答案

IIUC你需要combine_firstfillna如果需要将 NaN 替换为其他列的值:

print (df.A.combine_first(df.B))
id
1 13.0
2 98.0
3 20.0
4 10.0
5 39.0
6 30.0
Name: A, dtype: float64

或者:

print (df.A.fillna(df.B))
id
1 13.0
2 98.0
3 20.0
4 10.0
5 39.0
6 30.0
Name: A, dtype: float64


print (df.A.combine_first(df.B) + df.B)
id
1 26.0
2 196.0
3 43.0
4 55.0
5 103.0
6 40.0
dtype: float64

如果需要对两列求和并将 NaN 替换为 0 使用 add带参数 fill_value:

print (df.A.add(df.B, fill_value=0))
id
1 13.0
2 98.0
3 43.0
4 55.0
5 103.0
6 40.0
dtype: float64

编辑:

您需要:

df.ix[1,'A'] = df.ix[1,'balance']
print (df)
A B balance
id
1 23.0 13 23
2 NaN 98 41
3 20.0 23 12
4 10.0 45 22
5 39.0 64 32
6 30.0 10 0

编辑1:

df.ix[1,'A'] = df.ix[1,'balance']
df.ix[1,'B'] = df.ix[1,'B'] + df.ix[1,'balance']

print (df)
A B balance
id
1 23.0 36 23
2 NaN 98 41
3 20.0 23 12
4 10.0 45 22
5 39.0 64 32
6 30.0 10 0

关于python - 如何从 pandas 数据帧的两个不同列添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38230143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com