假设,我有下面的数据帧作为示例。你知道吗
name age status price
0 frank 12 1 100
1 jack 33 0 190
2 joe 22 1 200
******************************
期望输出:
name age status price
0 frank 12 1 100
1 jack 33 0 190
2 jack NaN 0 -190
3 joe 22 1 200
******************************
我还发布了下面的示例数据框,因此您可以轻松地测试它。你知道吗
df1 = pd.DataFrame({
"name":["frank", "jack", "joe"],
"age": [12, 33, 22],
"status": [1,0, 1],
"price": [100,190, 200]
})
如您所见,我想在上述行的基础上插入一个新行,status
是0,这意味着事务失败。为了更方便地进行统计,我想在该行下面生成一个新行。我还希望它的price
是负数。因为我不关心新行的整列,所以我希望另一列是NaN
,就像我想要的输出中的'age'。你知道吗
我已经试过了。你知道吗
import pandas as pd
import numpy as np
df1 = pd.DataFrame({
"name":["frank", "jack", "joe"],
"age": [12, 33, 22],
"status": [1,0, 1],
"price": [100,190, 200]
})
df2_list = []
for i, row in df1.iterrows():
if row["status"] == 0:
origin_row = row.to_dict()
new_row = ({
"name": origin_row.get("name"),
#"age": origin_row.get("age"),
"age": np.NaN,
"status": origin_row.get("status"),
"price": -origin_row.get("price"),
})
df2_list.append(new_row)
df2 = pd.DataFrame(df2_list)
# concat df1 and df2 and sort it .
df3 = pd.concat([df1, df2], ignore_index=True)
df4 = df3.sort_values(['name', 'price'], ascending=[True, False])
print(df4)
我有一个循环,检查它是否符合我的条件status==0
,并将它附加到我的tmp列表中,然后…但是代码太多了。我想知道有没有什么好办法,我是说更多的Python代码或者熊猫已经有了一些功能可以吗?你知道吗
使用
numpy.repeat
添加行,使用Series.duplicated
设置价格。你知道吗如果您还需要在age列中屏蔽nan,可以使用
Series.mask
来实现。你知道吗完整代码。你知道吗
相关问题 更多 >
编程相关推荐