จะเติมค่าที่ขาดหายไปตามคอลัมน์อื่น ๆ ใน Pandas dataframe ได้อย่างไร?


19

สมมติว่าฉันมีกรอบข้อมูล 5 * 3 ซึ่งคอลัมน์ที่สามมีค่าที่ขาดหายไป

1 2 3
4 5 NaN
7 8 9
3 2 NaN
5 6 NaN

ฉันหวังว่าจะสร้างมูลค่าสำหรับกฎตามมูลค่าที่ขาดหายไปซึ่งคอลัมน์ที่สองของผลิตภัณฑ์แรก

1 2 3
4 5 20 <--4*5
7 8 9
3 2 6 <-- 3*2
5 6 30 <-- 5*6

ฉันจะใช้ data frame ได้อย่างไร? ขอบคุณ

วิธีเพิ่มเงื่อนไขในการคำนวณมูลค่าที่ขาดหายไปเช่นนี้?

if 1st % 2 == 0 then 3rd = 1st * 2nd else 3rd = 1st + 2nd

1 2 3
4 5 20 <-- 4*5 because 4%2==0
7 8 9
3 2 5 <-- 3+2 because 3%2==1
5 6 11 <-- 5+6 because 5%2==1

คุณไม่สามารถทำเช่นนี้เพราะขนาดจะไม่เท่ากัน
Mayur Dangar

คุณสามารถขยายคำตอบของคุณ? ทำไมมันเป็นไปไม่ได้และเขาจะทำอะไรได้บ้างเพื่อแก้ปัญหา?
Damian Melniczuk

เฮ้ฉันมีคำถามเดียวกัน แต่ถ้าข้อมูลที่ฉันจัดการเป็นข้อความ นั่นคือเงื่อนไขเป็นเช่น "ถ้า 'ส่วนผสม' มีไก่แล้ว 'พิมพ์' = ไม่ใช่ผัก"
user7389747

คำตอบ:


17

สมมติว่าสามคอลัมน์ของคุณจะถูก dataframe a, และb cนี่คือสิ่งที่คุณต้องการ:

df['c'] = df.apply(
    lambda row: row['a']*row['b'] if np.isnan(row['c']) else row['c'],
    axis=1
)

รหัสเต็ม:

df = pd.DataFrame(
    np.array([[1, 2, 3], [4, 5, np.nan], [7, 8, 9], [3, 2, np.nan], [5, 6, np.nan]]), 
    columns=['a', 'b', 'c']
)
df['c'] = df.apply(
    lambda row: row['a']*row['b'] if np.isnan(row['c']) else row['c'],
    axis=1
)

ไม่กี่ปีที่ผ่านมา แต่จะใช้งานได้เมื่อคอลัมน์เป็นตัวเลขเท่านั้น np.isnanไม่รองรับข้อมูลที่ไม่ใช่ตัวเลข นี่ไม่ใช่ปัญหาเนื่องจาก OP มีคอลัมน์ตัวเลขและการดำเนินการทางคณิตศาสตร์ แต่pd.isnullเป็นทางเลือกที่ดีกว่า
Adarsh ​​Chavakula



2

สมมติว่าสามคอลัมน์ใน dataframe ของคุณa, และb cจากนั้นคุณสามารถดำเนินการตามที่ต้องการดังนี้

values = df['a'] * df['b']
df['c'] = values.where(df['c'] == np.nan, others=df['c'])

1
หรือnp.where(pd.isnull(df.c), df.a * df.b, df.c)
Valentas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.